易失性布尔型 vs 原子布尔型

303

AtomicBoolean相对于volatile boolean的优点是什么?


22
我正在寻找更细致的回答:“每种方法的限制是什么?”例如,如果一个线程设置标记并由一个或多个其他线程读取,那么就不需要使用AtomicBoolean。然而,如同我从这些答案中看到的,如果线程在多个线程中共享变量,且多个线程可以写入并依据读取结果执行操作,那么AtomicBoolean会带来CAS类型的非锁定操作。实际上,我在这里学到了很多。希望其他人也能受益。 - JeffV
1
可能是 volatile boolean vs. AtomicBoolean 的重复问题。 - Flow
易变的布尔类型需要显式同步来处理竞态条件,换句话说,就是多个线程更新共享资源(状态更改)的情况,例如增量/减量计数器或翻转布尔值。 - sactiw
12个回答

5

布尔原始类型对于写入和读取操作来说是原子的,volatile保证了先行发生原则。因此,如果您只需要一个简单的get()和set(),则不需要AtomicBoolean。

另一方面,如果您需要在设置变量值之前实现某些检查,例如“如果为true,则设置为false”,那么您也需要以原子方式执行此操作。在这种情况下,请使用AtomicBoolean提供的compareAndSet和其他方法,因为如果您尝试使用volatile boolean实现此逻辑,则需要一些同步操作以确保该值在get和set之间没有更改。


-2

这两者概念相同,但在原子布尔中,如果在操作之间发生CPU切换,它将提供原子性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接