Java双重检查锁定单例必须使用volatile关键字吗?

时间:2018-07-04 16:26:02

标签: java volatile happens-before

嗨,我对单例模式中的双重检查锁定有问题。在以下代码中:

private volatile   static DoubleCheckSingleton instance;

private DoubleCheckSingleton() {}


public static DoubleCheckSingleton getInstance(){

    if(instance==null){ //first

        synchronized (DoubleCheckSingleton.class){

            if(instance==null){  // second
                instance=new DoubleCheckSingleton();
            }

        }

    }

    return instance;

}

假设现在有两个线程,分别是A和B。之后,它们同时执行。根据事前定义,一个线程释放锁后,另一个线程获得了锁,后者可以看到先前的更改。

如果是这样,我认为不需要volatile关键字,那么为什么要在这里使用volatile关键字呢?哪个朋友可以解释?谢谢您的回答

0 个答案:

没有答案