gpt4 book ai didi

java - 双重检查锁定文章

转载 作者:搜寻专家 更新时间:2023-10-30 21:14:38 24 4
gpt4 key购买 nike

我正在阅读 this article关于“双重检查锁定”和文章的主要主题,我想知道为什么在文章的某些地方作者使用下一个成语:

Listing 7. Attempting to solve the out-of-order write problem

public static Singleton getInstance()  
{
if (instance == null)
{
synchronized(Singleton.class) { //1
Singleton inst = instance; //2
if (inst == null)
{
synchronized(Singleton.class) { //3
inst = new Singleton(); //4
}
instance = inst; //5
}
}
}
return instance;
}

我的问题是:有什么理由用同一个锁同步两次某些代码吗?这样做有什么目的吗?

非常感谢。

最佳答案

锁定两次的目的是尝试防止乱序写入。内存模型指定重新排序可以发生的位置,部分是根据锁。该锁确保在“instance = inst;”之后不会出现任何写入(包括单例构造函数中的任何写入)。行。

但是,为了更深入地探讨这个主题,我建议 Bill Pugh's article .然后永远不要尝试 :)

关于java - 双重检查锁定文章,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/157198/

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