gpt4 book ai didi

java - 为什么在双重检查锁定中使用了volatile

转载 作者:行者123 更新时间:2023-12-02 04:19:01 27 4
gpt4 key购买 nike

从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;
}
}


我不明白为什么要使用 volatilevolatile用法是否会违反使用双重检查锁定(即性能)的目的?

最佳答案

理解为什么需要volatile的一个很好的资源来自JCIP书。维基百科也有该材料的decent explanation

真正的问题是Thread A可能在完成构造instance之前为instance分配了一个内存空间。 Thread B将看到该分配并尝试使用它。这导致Thread B失败,因为它使用的是instance的部分构造版本。

关于java - 为什么在双重检查锁定中使用了volatile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56647905/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com