java.util.Collections中synchronized ...的可用性

时间:2010-01-18 05:44:54

标签: java concurrency collections

我在看静态方法

Collections.synchronizedList(List<T> list)

Javadoc说

  

当迭代它时,用户必须手动同步返回的列表...

如果我还需要手动同步,那么创建同步列表的目的是什么?

2 个答案:

答案 0 :(得分:7)

你要使用

的原因
Collections.synchronizedList(List<T> list)  

是因为除了迭代器之外的所有方法都使用列表本身作为互斥锁同步所以你不必这样做

synchronized(list) {
    list.add(type);
}   

相反,你可以做到

list.add(type);  

它将是线程安全的。

唯一不同步的方法是迭代列表。列表迭代器无法以同步方式返回,因为之后您将迭代它,这就是为什么需要手动同步列表的原因。总而言之,你只需要在迭代它时同步列表,以及你不需要的其他所有内容。

答案 1 :(得分:1)

java collections tutorial解释了这一点。基本上,每次迭代都会重新启动对底层集合的多次调用。将这些调用muct原子化为单个“事务”。