java - 如果迭代已经同步,是否有必要使用synchronizedList而不是List?

标签 java multithreading list synchronization

任务很简单。我有十几个线程和一个(某些对象的)“全局”列表。 每个线程(定期)迭代所有列表以查找所需的对象并更改它(如果不存在则添加它)。然后再次迭代并将所有对象保存到文件中。 JavaDoc 说:“用户在迭代返回的列表时必须手动同步它” 现在 - 我对列表所做的所有操作都是在同步块(synchronized block)内完成的。 据我了解,synchronizedList 的内部实现也提供了一些同步,并且它们(我认为)增加了不需要的延迟。

如果我使用简单列表怎么办? 我想 - 如果我对列表所做的一切都已经在关键部分 - 如果我改变我会失去什么

private static final List<JobSummary> SyncJS = Collections.synchronizedList(new ArrayList<JobSummary>());

private static final List<JobSummary> SyncJS = new ArrayList<>(); 

或者我错过了什么?

最佳答案

同步对象的目的是避免手动同步。如果您位于同步块(synchronized block)内,则不需要它们。这只会带来额外的开销。

关于java - 如果迭代已经同步,是否有必要使用synchronizedList而不是List?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28888077/

相关文章:

完成主要代码后出现 java.nio.channels.ClosedSelectorException

c# - 无法等待进程运行直到结束

list - 可靠集合上的用户-帖子-评论关系实现

java - 如何以编程方式在android Q中获取IMSI?

java - 查找所有的 xpath 或 cssSelector 位置

java - 如何解决无限readLine while

java - 在 Android 中从服务器播放 mp4 视频时出错

java - 如何在java多线程环境中复制ArrayList<T>?

CSS:子菜单绝对定位的子菜单

Java8 将对象列表转换为对象的一个​​属性列表