ConcurrentModificationException を防ぐリストまたはマップの反復処理のコード シーケンスはどれですか? 私たちのコードには、繰り返し散発的に ConcurrentModificationException があります。問題の原因は 2 つあります。
- 別のスレッドが反復時にリストを変更します
- ループ内で呼び出されるメソッドがリストを変更しています。
問題 1 は、ループを同期させることで解決できます。しかし、原因 2 のようにループ内でエイリアン コードが呼び出された場合、これは良くありません。
問題 2 は、リストまたはマップのコピーで解決できます。
これは、ループの前にリストまたはマップを同期ブロックにコピーする必要があることを意味します。より良い解決策はありますか?
サンプルコード:
public void todoSomeThings( Map<Abc, Object> map ){
for( Abc abc : map.keySet() ){
abc.todoSomeThings();
}
}