任务很简单。我有十几个线程和一个(某些对象的)“全局”列表。 每个线程(定期)迭代所有列表以查找所需的对象并更改它(如果不存在则添加它)。然后再次迭代并将所有对象保存到文件中。 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/