gpt4 book ai didi

java - 在与外部同步相同的对象上进行内部同步

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:48:09 25 4
gpt4 key购买 nike

最近我参加了一个关于一些设计模式的讲座:

显示了以下代码:

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

取自:Double-checked locking: Take two

我的问题与上述模式无关,但与同步块(synchronized block)有关:

第 1 行和第 3 行中的双重同步对于同步操作是在同一对象上完成的事实有任何好处吗?

最佳答案

在旧的 Java 内存模型 (JMM) 中,退出一个 synchronized block 据称会将本地数据刷新到主内存。输入一个 synchronized block 用于重新读取缓存数据。 (这里,缓存包括具有相关编译器优化的寄存器。)旧的 JMM 已损坏且未正确实现。

在新的 JMM 中它什么都不做。新的 JMM 为 1.5 指定,并为“Sun”1.4 JRE 实现。 1.5 已于前段时间结束,因此您不必担心旧的 JMM(好吧,也许 Java ME 会做一些不可预测的事情)。

关于java - 在与外部同步相同的对象上进行内部同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2463429/

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