[英]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
其他線程可以看到更改。
主要區別是:
synchronized
或AtomicBoolean
可以獲得更好的性能 synchronized
塊將允許你以原子方式添加指令,但AtomicBoolean
不會
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.