Java 在不同地方同时修改列表

Java modifying list concurrently at different places

我有一段代码,我在其中使用迭代器遍历 ArrayList,例如:

Iterator iterator = list.iterator();
while (iterator.hasNext()) {
  Element element = iterator.next();
  iterator.remove();
  handle(element)
}

'handle(Element element)' 的位置如下:

ListIterator iterator = list.listiterator();
iterator.add(element);

现在这给出了一个 ConcurrentModificationException,因为第一个方法中的 iterator 没有用新添加的元素更新。

我目前已经使用 CopyOnWriteArrayList 解决了这个问题,但是这些对于性能来说非常昂贵。有没有更好的方法来解决这个问题?

提前致谢!

(注意:该示例没有任何意义,但旨在说明我所面临的问题)


我将尝试解释我为什么这样做:

鉴于上述要求,简单的解决方案是使用 Queue (javadoc) 而不是 List.

I have a list of 'commands' in my main class that need to be executed

一个Queue可以表示一个命令序列。

I have a while-loop (code 1 in the example) that iterates over these commands and execute them one-by-one, while removing them when executed from the list.

Queue 的等价物是重复调用 remove()poll() 等以从 Queue 中获取和删除第一个命令。您重复执行此操作,直到 Queue 为空。

请注意,这不涉及 Iterator

While executing a command, this command can in its turn add a new command to the list that is saved in my main class.

这可以通过调用 add()offer()Queue 添加命令来完成。


请注意,Queue 有许多不同的实现,具有不同的属性:

  • 具有有限或无限大小的队列
  • 阻塞或不阻塞的队列
  • 简单的 FIFO 队列与 LIFO 队列或优先级队列