モジュール java.base
パッケージ java.util

クラスConcurrentModificationException

java.lang.Object
java.lang.Throwable
java.lang.Exception
java.lang.RuntimeException
java.util.ConcurrentModificationException
すべての実装されたインタフェース:
Serializable
直系の既知のサブクラス:
DirectoryIteratorException

public class ConcurrentModificationException extends RuntimeException
この例外は、オブジェクトの並行変更を検出したメソッドによってスローできます(そのような変更が許可されていないとき)。

たとえば、あるスレッドがCollectionで反復処理を行っている間に、別のスレッドがそのCollectionを変更することは一般に許可されません。 通常、そのような環境では、反復処理の結果は保証されません。 いくつかのイテレータ(Iterator)の実装(JREが提供するすべての一般的な目的のコレクションの実装の、イテレータの実装を含む)は、その動作が検出された場合にこの例外をスローすることを選択できます。 この例外をスローするイテレータは、フェイルファスト・イテレータと呼ばれます。イテレータは、将来の予測できない時点において予測できない動作が発生する危険を回避するために、ただちにかつ手際よく例外をスローします。

この例外は、オブジェクトが別のスレッドによって並行して更新されていないことを必ずしも示しているわけではありません。 単一のスレッドが、オブジェクトの規約に違反する一連のメソッドを発行した場合、オブジェクトはこの例外をスローします。 たとえば、フェイルファスト・イテレータを持つコレクションの反復処理を行いながら、スレッドがコレクションを直接修正する場合、イテレータはこの例外をスローします。

通常、非同期の並行変更がある場合、確かな保証を行うことは不可能なので、フェイルファストの動作を保証することはできません。 フェイルファスト・オペレーションは最善努力原則に基づき、ConcurrentModificationExceptionをスローします。 したがって、正確を期すためにこの例外に依存するプログラムを書くことは誤りです。ConcurrentModificationExceptionはバグを検出するためにのみ使用すべきです。

導入されたバージョン:
1.2
関連項目: