gpt4 book ai didi

java - 什么时候最好在 Java 中使用 volatile boolean 而不是 AtomicBoolean?

转载 作者:IT老高 更新时间:2023-10-28 20:27:46 55 4
gpt4 key购买 nike

我查看了 SO 中的其他 volatile 与 Atomicxxxx 问题(包括 this one )并阅读了 the description of java.util.current.atomic ,我对细微差别不太满意。

如果我尝试在使用 volatile booleanAtomicBoolean 之间做出决定,除了 AtomicBoolean 提供的原子读取-修改-写入操作之外,是否还有实际区别? (例如 compareAndSet()getAndSet())

假设我有

volatile boolean flag;

然后一个或多个线程设置标志(但不清除它)。如果我有一个线程读取标志,并且如果设置,则执行一项操作,然后清除标志,那么 volatile 是否足够?

而言,AtomicBoolean 是否比 volatile boolean 成本更高
  • 内存空间
  • 性能下降(volatile boolean 似乎需要内存防护,AtomicBoolean 似乎需要内存防护 + 根据 java.util.current 对 CAS 操作进行一些小锁定。原子描述)

我的直觉是只使用 AtomicBoolean 并确保安全,但我想了解是否存在使用 volatile boolean 代替的情况(例如,如果我有数千个实例和性能是个问题)。

最佳答案

AtomicBooleanvolatile 从实际的角度来看的主要区别是比较和设置操作与 volatile变量。

 volatile boolean b;

void foo() {
if( b ) {
//Here another thread might have already changed the value of b to false
b = false;
}
}

但是看到你所有的并发写入都是幂等的并且你只从一个线程中读取,这应该不是问题。

关于java - 什么时候最好在 Java 中使用 volatile boolean 而不是 AtomicBoolean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4876122/

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