【发布时间】:2012-01-02 11:40:30
【问题描述】:
通过使用仅在实例为 null 时才读取的 volatile 布尔值,我是否可以像这样初始化实例后避免默认/频繁的 volatile 读取?还没有看到有人推荐这样的双重检查锁定,但似乎在完全初始化后避免了易失性读取......
public class Singleton {
private static volatile boolean initialized = false;
private static Object lock = new Object();
private static Singleton instance;
public static Singleton getInstance(){
if(instance != null) return instance;
if(!initialized){
synchronized(lock){
if(!initialized){
instance = new Singleton();
initialized = true;
}
}
}
return instance;
}
}
【问题讨论】:
标签: java concurrency