我看靜態方法可用性的同步......方法java.util.Collections中
Collections.synchronizedList(List<T> list)
的Javadoc說
當務之急是用戶在返回手動同步列表時迭代它...
如果我仍然必須手動同步它,創建一個同步列表的目的是什麼?
我看靜態方法可用性的同步......方法java.util.Collections中
Collections.synchronizedList(List<T> list)
的Javadoc說
當務之急是用戶在返回手動同步列表時迭代它...
如果我仍然必須手動同步它,創建一個同步列表的目的是什麼?
爲什麼要使用
Collections.synchronizedList(List<T> list)
是因爲所有的方法,但迭代器使用的是列表本身的互斥體,這樣你就不必做
synchronized(list) {
list.add(type);
}
而是同步的原因你可以做
list.add(type);
它將是線程安全的。
迭代列表時,唯一不同步的方法是。列表迭代器不能以同步方式返回,因爲之後會迭代它,這就是爲什麼需要手動同步列表。因此,總而言之,您只需在迭代列表時同步列表,其他所有內容都不需要。
java collections tutorial解釋了這一點。基本上,每次迭代都會調用對基礎集合的多個調用。這些調用被簡化爲一個單獨的「事務」。
更一般地說,您必須在任何時候手動同步以進行*多個*方法調用,而不需要在兩者之間進行狀態更改。例如,獲取列表的最後一個元素:'synchronized(list){return list.get(list.size() - 1);}'。 –