【发布时间】:2014-06-26 15:29:35
【问题描述】:
我想用 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;
}
}
}
我还想创建一个无锁版本,用于一个线程比其他线程访问 Singleton 的次数更多的场景,我将如何使用 Java 中的原子对象来实现这一点,即 AtomicBoolean 或 AtomicReference 等。能否提供一个代码示例?
【问题讨论】:
-
您也可以将整个
getSynchronizedInstance()方法设为synchronized,而不是自己显式获取锁。 -
当然
enum会更简单,更快;) -
@PeterLawrey 更不用说这是实现单例模式的推荐方式!
标签: java multithreading singleton lazy-initialization