gpt4 book ai didi

java - Double check 中不稳定的东西是什么?

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

<分区>

让我们看看经典的双重检查

class Foo {
private volatile Foo singleton = null;
public Foo getFooSingleton() {
if (singleton == null) {
synchronized(this) {
if (singleton == null)
singleton = new Foo();
}
}
return singleton;
}
}

volatile modifire 保证在所有线程中都能正确看到“单例”变量的值。但是在当前示例中我真的需要这个吗?我想不是。所以 - 这就是我认为该程序以最糟糕的方式运行的方式 - 当一个线程所做的更改未被其他线程看到时。

  1. 线程一进入同步部分并创建单例
  2. 线程两个进入同步,同步其当前堆栈值(现在他看到 singleton != null),进行第二次检查并退出同步部分。

所以。即使没有 volatile 声明,一切也能正常工作,甚至更好 =)

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