任务很简单。我有十几个主题和一个"全球"列表(某些对象)。 每个线程(周期性地)遍历所有列表以找到所需对象并更改它(如果不存在则添加它)。然后再次迭代并将所有对象保存到文件中。 JavaDoc说:"当迭代它时,用户必须在返回的列表上手动同步" 而现在 - 我在列表中执行的所有操作都是在synchronized块中完成的。 正如我所理解的那样,在synchronizedList的内部实现中,也会出现一些同步,并且它们(我想)会增加不需要的延迟。
如果我使用简单列表怎么办? 我认为 - 如果我对列表的所有操作已经处于关键部分 - 如果我改变了,我会失去什么
private static final List<JobSummary> SyncJS = Collections.synchronizedList(new ArrayList<JobSummary>());
到
private static final List<JobSummary> SyncJS = new ArrayList<>();
或者我错过了什么?
答案 0 :(得分:1)
同步对象的要点是避免手动同步。如果你在synchronized
区块内,那么你不需要它们。它只是额外的开销。
答案 1 :(得分:0)
操作&#34;找到所需的对象并进行更改&#34;不是原子的,因此您需要在执行任何非原子操作之前同步列表。
如果您同步所有操作的列表,则不需要Collections.synchronizedList(new ArrayList<JobSummary>())
。 new ArrayList<>()
会运作良好。