java – 为什么在双重检查锁定中使用volatile

从Head First设计模式书中,具有双重检查锁定的单例模式已实现如下:

public class Singleton {
    private volatile static Singleton instance;
    private Singleton() {}
    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

我不明白为什么要使用挥发性物质.挥发性使用是否会破坏使用双重检查锁定的目的,即性能?

解决方法:

JCIP书中提供了理解为什么需要挥发性物质的良好资源.*也有decent explanation这种材料.

真正的问题是,线程A可能在完成构造实例之前为其分配一个内存空间.线程B将看到该分配并尝试使用它.这导致线程B失败,因为它使用部分构造的实例版本.

上一篇:Redis学习-05 Set集合基本操作


下一篇:小甲鱼Python第027讲集合:在我的世界里,你就是唯一 | 课后测试题及参考答案