私が取り組んでいるマルチスレッド アプリケーションでは、ときどきConcurrentModificationExceptions
リスト (主に 、場合によってはArrayList
ベクトル) が表示されます。しかし、コレクションを繰り返し処理すると項目が欠落しているように見えるが、例外がスローされないため、同時変更が発生していると思われる場合もあります。ConcurrentModificationException
のドキュメントには信頼できないと書かれていることは知っていますが、リストを同時に変更していないことを確認するにはどうすればよいですか? また、コレクションへのすべてのアクセスを同期ブロックでラップすることが、それを防ぐ唯一の方法ですか?
更新:はい、私は について知ってCollections.synchronizedCollection
いますが、コレクションを反復している間に誰かがコレクションを変更するのを防ぎません。コレクションを繰り返し処理しているときに誰かがコレクションに何かを追加すると、少なくとも私の問題の一部が発生していると思います。
2 番目の更新 Jason が行ったように、synchronizedCollection とクローン作成の言及を、java.util.concurrent と jacekfoo や Javamann のような apache コレクション フレームワークの言及と組み合わせたい場合、私は答えを受け入れることができます。