繁体   English   中英

java.util.Collections中同步方法的可用性

[英]usability of synchronized… methods in java.util.Collections

我在看静态方法

Collections.synchronizedList(List<T> list)

Javadoc说

当用户遍历返回列表时,必须手动对其进行同步...

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

你会用的原因

Collections.synchronizedList(List<T> list)  

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

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

相反,你可以做

list.add(type);  

它将是线程安全的。

唯一不同步的方法是在迭代列表时。 列表迭代器不能以同步方式返回,因为您将在之后迭代它,这就是为什么需要手动同步列表的原因。 因此,总而言之,您只需要在遍历列表时进行同步即可,而不必进行其他所有操作。

Java集合教程对此进行了解释。 基本上,每次迭代都会重新调用对基础集合的多次调用。 这些调用可以原子化为单个“事务”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM