我想在 Java 中实现线程安全的延迟加载单例。
这是一个好的设计吗?
public final class ThreadSafeLazySynchronizedSingleton {
private ThreadSafeLazySynchronizedSingleton(){}
private static ThreadSafeLazySynchronizedSingleton instance;
public static ThreadSafeLazySynchronizedSingleton getSynchronizedInstance(){
synchronized(ThreadSafeLazySynchronizedSingleton.class){
if (instance==null){
instance = new ThreadSafeLazySynchronizedSingleton();
}
return instance;
}
}
}
我还想创建一个无锁版本,用于一个线程比其他线程访问单例多次的场景,我将如何使用 Java 中的原子对象(即 AtomicBoolean 或 AtomicReference 等)实现这一点。你能提供一个代码示例吗?
最佳答案
更好的设计应该是
public final class ThreadSafeLazySynchronizedSingleton {
private ThreadSafeLazySynchronizedSingleton(){}
private static volatile ThreadSafeLazySynchronizedSingleton instance;
public static ThreadSafeLazySynchronizedSingleton getSynchronizedInstance(){
if (instance==null)
synchronized(ThreadSafeLazySynchronizedSingleton.class){
if (instance==null){
instance = new ThreadSafeLazySynchronizedSingleton();
}
return instance;
}
}
}
然而,恕我直言,最好的设计是
public enum ThreadSafeLazySynchronizedSingleton {
INSTANCE;
}
关于java - 这是 Java 中线程安全延迟加载单例的良好实现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24434566/