繁体   English   中英

AtomicBoolean与同步块有什么区别

[英]AtomicBoolean vs Synchronized block, whats the difference

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

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对象,(如果)它们是安全的吗?

如果你正在试图做的一切就是让获取和设置一个boolean值原子,然后是-你可以使用AtomicBoolean ,而不是没有任何同步。

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

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

主要区别是:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM