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

phu*_*ehe 3 java collections concurrency

我在看静态方法

Collections.synchronizedList(List<T> list)
Run Code Online (Sandbox Code Playgroud)

Javadoc说

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

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

man*_*unk 7

你之所以会用

Collections.synchronizedList(List<T> list)  
Run Code Online (Sandbox Code Playgroud)

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

synchronized(list) {
    list.add(type);
}   
Run Code Online (Sandbox Code Playgroud)

相反,你可以这样做

list.add(type);  
Run Code Online (Sandbox Code Playgroud)

它将是线程安全的.

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