我在一些多线程代码中遇到了这两个,并且想知道两者之间是否存在差异。
我的意思是使用 AtomicBoolean 而不是 SynchronizedBoolean 是否会对性能产生显着影响?
它会影响计算的正确性吗?
我在一些多线程代码中遇到了这两个,并且想知道两者之间是否存在差异。
我的意思是使用 AtomicBoolean 而不是 SynchronizedBoolean 是否会对性能产生显着影响?
它会影响计算的正确性吗?
AtomicBoolean是标准 java 并发包的一部分。 SynchronizedBoolean是 Doug Lea(许多 java 并发包的作者)创建的一组实用程序的一部分。在性能方面,您应该期望 AtomicBoolean 性能更好——它使用 volatile 布尔值,而 SynchronizedBoolean 使用 ReadWriteLock。
然而,在大多数应用程序的实践中,您不会注意到太大的差异。
真正的区别(以及应该指导您的选择)在于这两个类提供的语义。AtomicBoolean 仅提供简单的 set/get/compareAndSet 操作。SynchronizedBoolean 提供原子布尔操作并公开其内部锁以允许您在其值的上下文中执行 Runnables。
Doug Lea 已免费向社区提供此资源。我发现 SynchronizedBoolean 的扩展,WaitableBoolean特别有用,因为它允许您在发生特定状态更改时在锁内执行 Runnable。