嗨,我在单例模式中的双重检查锁定有问题。在以下代码中:
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。之后它们同时执行。根据happens-before的定义,一个线程释放锁后,另一个线程获取锁,那么后者可以看到之前的变化。
如果是这样,我认为不需要 volatile 关键字,那我们为什么要在这里使用 volatile 关键字呢?哪位朋友能解释一下?谢谢您的回答