Java 原子布尔和同步块有什么区别

Java 原子布尔和同步块有什么区别,java,concurrency,synchronization,boolean,atomicity,Java,Concurrency,Synchronization,Boolean,Atomicity,我试图理解以下两个代码块之间的区别 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) {

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

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;
 }
}
我需要线程保护一个布尔值,仅此而已,并且 过去使用的是后来的方法,但想开始使用原子 对象,(如果)它们是安全的?,

如果您要做的只是获取和设置单个
布尔值原子化,那么是的-您可以使用
原子布尔值,而无需任何同步


当然,
synchronized
允许更广泛的使用,例如在块内执行多个操作而不丢失锁,或者将其用于等待/通知。因此,这不像原子布尔是同步的一般替代方法,但在本例中,您可以使用它来代替同步。

有一些细微的区别,但从外部看,这两个代码片段的行为类似:如果调用
set
方法,随后调用
get
的其他线程将看到该更改

主要区别在于:

  • 性能:根据争用级别的不同,使用
    synchronized
    AtomicBoolean
  • 原子性:如果在某个阶段您想做的不仅仅是设置布尔值,那么
    synchronized
    块将允许您以原子方式添加指令,但
    AtomicBoolean
    不会

那么。。。阅读原子布尔的javadoc?它描述了提供的保证以及与同步相比的优势。请让我看一下java文档,它“清楚地”解释了一种方法相对于另一种方法的优势。我在查看javadoc的包
java.util.concurrent.atomic
中找不到它: