gpt4 book ai didi

java - 使用原子变量时的内存排序

转载 作者:行者123 更新时间:2023-12-01 17:24:01 25 4
gpt4 key购买 nike

AtomicBoolean a = new AtomicBoolean(false);
AtomicBoolean b = new AtomicBoolean(false);

Thread A {
a.compareAndSet(false, true);
b.compareAndSet(false, true);
}

Thread B {
print b.get()
print a.get()
}

从上面的程序片段来看,如果两个线程同时运行,线程 B 是否有可能打印 true 和 false? (这意味着它认为“b”为真,而“a”仍然为假?

最佳答案

is it possible for Thread B to print true and false?

不,不是。如果 b 设置为 true,则 a 将已设置为 true,并且由于 AtomicBoolean 包装了一个 volatile ,两个字段都将通过 get() 调用进行更新和可见。对 volatile 字段的任何访问都可确保内存同步以及所有代码提前完成==“发生在之前”保证。

当然,这是假设没有其他线程正在接触 ab

在竞争条件下,B 打印的可能值是:

  • falsefalse -- 如果 AtomicBoolean 均未更新
  • false, true -- 如果 b 在打印时未更新,但 a 已更新<
  • truetrue -- 如果 ba 均已更新

关于java - 使用原子变量时的内存排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16408503/

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