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;

}

}

我不明白为什么volatile要使用它。volatile使用不会 违反使用双重检查锁定(即性能)的目的吗?

回答:

真正的问题是Thread A可能instance在完成构造之前为其分配存储空间instanceThread B将看到该作业并尝试使用它。Thread B由于使用的是的部分构造版本,因此导致失败instance

以上是 Java 为什么在双重检查锁定中使用了volatile 的全部内容, 来源链接: utcz.com/qa/414585.html

回到顶部