如果我有這樣的事情snippet-同步同步列表
public List<E> list = Collections.synchronizedList(new ArrayList<E>());
然後,如果我做的方法中的一些操作 -
boolean absent = !list.contains(x); // Statement 1
if(absent) // Statement 2
list.add(x); // Statement 3
做我需要包裝內synchronized(list){ ... }
上述語句進行操作atomic
?
我不認爲這個問題是鏈接給出的倍數。這一個請求同步列表中的代碼塊,而另一個則是同步單個方法調用。即使他們的答案是不同的(必要的,而不是其他的)。 – uoyilmaz
@uoyilmaz這是一個規範,涵蓋了使用'synchronized'和'synchronizedList'方法的用例。和[answers](http://stackoverflow.com/a/9468329/1743880)也涵蓋了這一點:*如果該塊在列表上執行多個操作[...],那麼同步並不是多餘的* – Tunaki