2

这是我不断收到的错误。

"Exception in thread "Thread-3" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:782)
at java.util.ArrayList$Itr.next(ArrayList.java:754)
at group1.bt.Announce.run(Announce.java:22)
at java.lang.Thread.run(Thread.java:679)"
4

3 回答 3

3

您需要列表的同步视图。

List list = Collections.synchronizedList(new ArrayList());
   ...
synchronized (list) {
   Iterator i = list.iterator(); // Must be in synchronized block
   while (i.hasNext())
       foo(i.next());
}
于 2012-04-30T04:21:37.367 回答
3

您的问题是您正在从迭代器循环内部更改基础列表。您应该在 Announce.java 的第 22 行显示代码,以便我们可以看到您具体做错了什么,但是在开始循环之前复制您的列表,使用 for 循环而不是迭代器,或者保存您想要删除的项目从列表到新列表,然后在完成迭代器循环后将它们全部删除。

于 2012-04-30T04:31:02.623 回答
0

您可以使用以下方法来避免 ConcurrentModificationException:

 ListIterator

    Synchronizers

    CopyOnWrite

    toArray()

    Concurrent Collections:

在这种情况下,您可以ConcurrentHashMap从并发集合 API 中使用。我认为这很容易,并且不会仅在更新时冻结对象。

于 2012-04-30T04:46:44.540 回答