我得到 ConcurrentModificationException
,因为这个代码同时被多个线程访问:
public void flush(Audit... audits) {
// Copy first them on memory
this.pendingAudits.addAll(Arrays.asList(audits));
for (Iterator<Audit> it = this.pendingAudits.iterator(); it.hasNext();) {
// Do something
it.remove();
}
}
我在 pendingAudits
上获得了一个迭代器,我在删除每个元素的同时其他线程可以添加其他一些审计 .
关于如何优雅地解决它的任何想法?
1 回答
一个快速的解决方案是在
synchronized
中包含对this.pendingAudits
的每次访问:净效果是在任何给定时间只有一个线程可以执行同步块 . 如果频繁执行代码,这可能会成为瓶颈 .