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この場合、Concurrent Collection APIから使用できます。これは簡単で、更新のためだけにオブジェクトをフリーズすることはないと思います。

于 2012-04-30T04:46:44.540 に答える