我了解 AtomicInteger 的有效用例,但我对 AtomicBoolean 如何保证两个操作的原子性感到困惑。'改变布尔值' 和 ii。在以下经常引用的 AtomicBoolean 变量 atomicInitialized 用例中执行“一次性逻辑”,例如 initialize():
if (atomicInitialized.compareAndSet(false, true)) {
initialize();
}
此操作将首先将 atomicInitialized 设置为 true(如果为 false),然后执行不安全的 intialize()。它将保证 initialize() 只被调用一次,但第二个调用 getAndSet() 的线程不会被延迟,直到第一个线程完成初始化。因此,AtomicBoolean 在更新布尔值时提供原子性并不能真正为整个“if-block”提供原子性,并且必须使用同步/锁定机制来实现完整的原子性。因此,上面经常引用的流行用例并不是真正的原子!