【发布时间】:2009-08-10 15:37:11
【问题描述】:
java.util.concurrent.atomic.AtomicBoolean 没有可以原子地否定/反转值的方法吗?我可以用另一种方式吗?我错过了什么吗?
【问题讨论】:
-
我不明白 boolean b = ab.get(); 有什么问题; ab.compareAndSet(b, !b);你一定会翻转你得到的东西。总是想翻转一个布尔值而不考虑它的当前值真的很常见吗?
-
@Yishai:你肯定会翻转你得到的东西,但假设你有
ab=true,并且有 2 个切换器有竞争条件。到达那里的第一个切换位,第二个说“哦,我已经被切换了”,因此不理会它。这将留下ab=false,而如果切换操作单独发生,它将留下ab=true。那是一个错误。至于切换布尔值是否真的很常见:在硬件的情况下很常见,不确定纯软件的情况。 -
@Jason S,我认为您在重申我的问题是肯定的,至少在硬件方面(因此硬件模拟,如果没有别的)你会需要它。但我不知道这是否足以作为 API 的案例。
-
我有一个乒乓缓冲区,它可以真正使用 AtomicBoolean 中的 getAndNegate() 方法。
标签: java multithreading concurrency