2012-04-30 19 views

答えて

3

問題は、イテレータループ内の基になるリストを変更することです。 Announce.javaの22行目にコードを表示すると、間違っていることがわかりますが、ループを開始する前にリストをコピーするか、イテレータの代わりにforループを使用するか、削除するアイテムを保存してくださいリストから新しいリストに移動し、イテレータループを完了した後にen-masseを削除すると動作します。

+0

これは非常に役に立ちました。ありがとうございます – user1363410

+0

@ user1363410口頭で感謝するだけでなく、左にあるチェックボックスをクリックしてこの回答を受け入れる必要があります。実際には、言葉の部分をスキップすることができます:) –

2

リストの同期表示が必要です。

List list = Collections.synchronizedList(new ArrayList()); 
    ... 
synchronized (list) { 
    Iterator i = list.iterator(); // Must be in synchronized block 
    while (i.hasNext()) 
     foo(i.next()); 
} 
0

あなたはConcurrentModificationExceptionを避けるために、次の方法を使用することができます。

ListIterator 

    Synchronizers 

    CopyOnWrite 

    toArray() 

    Concurrent Collections: 

あなたは、これは簡単だと思いcase.Iだけupdationのためのオブジェクトを凍結しないこの中で同時コレクションAPIからConcurrentHashMapを使用することができます。

関連する問題