对于Java中的线程安全延迟加载的Singleton,这是否是一个好的实现? [英] Is this a good implementation for a Thread Safe Lazily Loaded Singleton in Java?
本文介绍了对于Java中的线程安全延迟加载的Singleton,这是否是一个好的实现?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想在Java中实现线程安全延迟加载的Singleton.
I want to implement Thread Safe Lazily Loaded Singleton in 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等)来实现此目的.您能提供一个代码示例吗?
I also want to create a lock-less version for use in a scenario where one thread accesses the Singleton many more times than the other threads, how would I achieve this using the atomic objects in Java, ie AtomicBoolean or AtomicReference etc. Could you provide a code example please?
推荐答案
一个更好的设计是
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;
}
}
}
但是,最好的恕我直言的设计是
However, the best design IMHO is
public enum ThreadSafeLazySynchronizedSingleton {
INSTANCE;
}
这篇关于对于Java中的线程安全延迟加载的Singleton,这是否是一个好的实现?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文