gpt4 book ai didi

java - 双重检查锁定模式 : Broken or not?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:02:46 26 4
gpt4 key购买 nike

为什么该模式被认为已损坏?我觉得还好吗?有什么想法吗?

public static Singleton getInst() {
if (instace == null) createInst();
return instace;
}

private static synchronized createInst() {
if (instace == null) {
instace = new Singleton();
}
}

最佳答案

乍一看还不错,但这种技术有很多细微的问题,通常应该避免。例如,考虑以下事件序列:

  1. 线程 A 注意到值是没有初始化,所以它获得了锁定并开始初始化值(value)。
  2. 编译器生成的代码是允许的将共享变量更新为指向一个部分构造的A 完成之前的对象执行初始化。
  3. 线程 B 注意到共享变量已经初始化(或者它出现了),并返回它的值。因为线程 B 相信值已经初始化,它不获取锁。如果 B 使用在所有之前的对象由 A 完成的初始化被看到B 程序可能会崩溃。

您可以通过使用“volatile”关键字正确处理您的单例实例来避免这种情况

关于java - 双重检查锁定模式 : Broken or not?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3616769/

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