嗨,我对单例模式中的双重检查锁定有问题。在以下代码中:
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关键字呢?哪个朋友可以解释?谢谢您的回答