Java中的Atomic Boolean vs SynchronizedBoolean

时间:2012-10-17 00:44:29

标签: java

我在一些多线程代码中遇到过这两个问题,并且想知道两者之间是否存在差异。

我的意思是使用AtomicBoolean而不是SynchronizedBoolean来制作一个 性能差异显着?

它是否会影响计算的正确性?

1 个答案:

答案 0 :(得分:4)

AtomicBoolean是标准java并发包的一部分。 SynchronizedBoolean是Doug Lea(大多数java并发包的作者)创建的一组实用程序的一部分。性能方面,你应该期望AtomicBoolean执行得更好 - 它使用volatile布尔值,而SynchronizedBoolean使用ReadWriteLock。

然而,在大多数应用程序的实践中,您不会注意到太多差异。

真正的区别(以及应该指导您的选择)是两个类提供的语义。 AtomicBoolean只提供简单的set / get / compareAndSet操作。 SynchronizedBoolean提供原子布尔操作并公开其内部锁,以允许您在其值的上下文中执行Runnable。

Doug Lea向社区免费提供此源代码。我找到了SynchronizedBoolean的扩展名,WaitableBoolean特别有用,因为它允许您在发生特定状态更改时在锁内执行Runnable。