JDK 1.6 の HashSet.java には、HashSet の反復子のフェイルファスト プロパティに関するコメントがいくつかあります。
このクラスの iterator メソッドによって返される反復子はフェイルファストです。反復子の作成後に、反復子自体の remove メソッド以外の方法でセットが変更されると、Iterator は ConcurrentModificationException をスローします。したがって、同時変更に直面した場合、反復子は、将来の不確定な時点で恣意的で非決定論的な動作を危険にさらすのではなく、迅速かつ明確に失敗します。
上の段落はかなり単純明快なので理解できますが、次の段落は理解できません。フェイルファスト イテレータが失敗する可能性があることを示す簡単な例があれば、それを理解できるかもしれません。
イテレータのフェイルファスト動作は保証できないことに注意してください。一般的に言えば、同期されていない同時変更が存在する場合にハードな保証を行うことは不可能であるためです。フェイルファスト イテレーターは、ベスト エフォート ベースで ConcurrentModificationException をスローします。したがって、その正確性をこの例外に依存するプログラムを作成するのは誤りです。反復子のフェイルファスト動作は、バグを検出するためだけに使用する必要があります。