[英]Java Synchronized Collections vs Object
我想知道這些同步方式之間有什么區別
List<Integer> intList = Collections.synchronizedList(new ArrayList<Integer>());
synchronized (intList) {
//Stuff
}
並使用對象鎖
Object objectLock = new Object();
List<Integer> intList = new ArrayList<Integer>();
synchronized (objectLock) {
//Stuff
}
第一種方法確保單個方法調用是同步的,並且避免了需要管理單獨的鎖對象。 一個線程可以調用
intList.add(3);
另一個可以打電話
intList.clear();
沒有synchronized
塊,它將被正確同步。 (不幸的是,當您需要為一組函數調用保持鎖定時,這無濟於事;然后,在這些調用周圍需要一個synchronized
塊。)此外,如果您需要傳遞列表,則可以使用
otherObject.doStuffWith(intList);
和
return intList;
代替
otherObject.doStuffWith(intList, objectLock);
和
return ListAndLock(intList, objectLock);
您顯示的代碼不一定是線程安全的!!
一個摘錄和另一個摘錄之間的唯一區別是用作同步監視器的對象。 這種差異將確定需要訪問您要保護的可變數據的其他線程應使用哪個對象進行同步
很好的閱讀: 實踐中的Java並發
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.