AtomicBoolean与同步块有什么区别

我试图理解以下两个代码块之间的区别

AtomicBoolean ab = new AtomicBoolean(false); using the following to get and set state. . ab.get(); ab.set(X); vs. private boolean ab = false; private final Object myboollock = new Ojbect(); public void setAB(boolean state) { synchronized(myboollock) { ab = state; } } public boolean getAB() { synchronized(myboollock) { return ab; } } 

我需要线程保护一个布尔值,就是所有,并且过去使用过后面的方法,但是想开始使用Atomic对象,(如果)它们是安全的吗?

有一些细微的差别,但从外部看,两个代码片段的行为类似:如果你调用set方法,那么随后调用get其他线程可以看到更改。

主要区别是:

  • 性能:根据争用程度,使用synchronizedAtomicBoolean可以获得更好的性能
  • primefaces性:如果在某个阶段你想要做的不仅仅是设置布尔值, synchronized块将允许你以primefaces方式添加指令但是AtomicBoolean不会

如果您要做的就是获取并设置一个boolean值primefaces,那么是 – 您可以使用AtomicBoolean而无需任何同步。

当然, synchronized允许更广泛的用途,例如在块内执行多​​个操作而不会丢失锁定,或者将其用于等待/通知。 所以它不像AtomicBoolean是同步的一般替代品 – 但在这种情况下,您可以使用它而不是同步。