1

我有朋友说,如下使用AtomicBooleanfor同步启动/关闭是无效的:

 public void startup() {
    if (started.compareAndSet(false, true)) {
                 ... startup code
         }
 } 

他说AtomicBoolean需要在循环内部才能实现线程安全。为什么我不能AtomicBoolean在循环外使用?这背后的原因是什么?

需要一个

4

2 回答 2

0

AtomicBoolean - 可以自动更新的布尔值。有关原子变量属性的描述,请参阅 java.util.concurrent.atomic 包规范。AtomicBoolean 用于诸如原子更新标志之类的应用程序中,不能用作 Boolean 的替代品。

决不是它只在循环中有效,当您需要以原子方式更改它时它是有效的,例如锁。与循环无关

于 2013-09-03T06:19:58.057 回答
0

您可能想提供更多上下文。例如,如果您的启动代码初始化了一些无法进行比较和交换的状态和线程,然后尝试使用该状态,那么您可能会遇到竞争。没有什么会迫使其他线程等待初始化完成。

于 2013-09-03T08:40:14.227 回答