【发布时间】:2014-06-13 01:31:57
【问题描述】:
我读到同步新实例创建的原因是两个线程可以同时访问getInstance并发现_instance为null并创建两个Singleton类实例。所以为了消除我们同步它。但是再次引入双重检查锁定方法如何再次检查 Synchronized 块内的实例是否为空。这有必要吗?一旦一个代码块被同步,它就已经是线程安全的了?
public class Singleton {
private static Singleton _instance = null;
private Singleton() { }
public static Singleton getInstance() {
if (_instance == null) {
synchronized (Singleton.class) {
_instance = new Singleton(); // why need to again check null
}
}
return _instance;
}
}
【问题讨论】:
标签: singleton