【Java】单例模式——双重检测锁

class Singleton {
    private volatile static Singleton instance;

    private Singleton() {}

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

volatile 是因为 实例化对象在JVM指令里是三个指令:

1. 分配内存空间
2. 初始化对象
3. 将对象指向刚分配的内存空间

第 2. 步和第 3. 步可能会重排序,那么就有可能出现返回一个初始化未完成的对象。
【Java】单例模式——双重检测锁_第1张图片

参考链接:

  1. cnblogs:Decouple:Java中的双重检查锁(double checked locking)

你可能感兴趣的:(总结,java,单例模式,双重检测锁)