「標準例外の使用を優先する」である「効果的なJava」アイテム60を読んでいます。
知っておく価値のあるもう 1 つの汎用例外は、ConcurrentModificationException です。この例外は、単一のスレッドまたは外部同期で使用するように設計されたオブジェクトが同時に変更されていることを検出した場合にスローされる必要があります。
通常CME
、ループ中にコレクションから削除しようとすると、人々は直面します。
しかし、ここで私は、自己実装されたクラスオブジェクトの同時変更を検出するための簡潔な例は何でしょうか?
別のスレッドが false であるフラグに直面した場合、内部オブジェクトと関連するブール値フラグを同期してから例外をスローするようなものになると思います。
ソースで見つけた簡単な調査のためにArrayList
:
final void checkForComodification() {
if (modCount != expectedModCount)
throw new ConcurrentModificationException();
}
しかし、方法の背後にある原則modCount
は維持されています。デクリメントされている場所を見つけることができません。