簡體   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