フェイルファスト反復子は、コレクションを反復処理します。反復中にコレクションが変更されると、例外が発生します。1 つのコレクションに対して反復が行われ、そのコピーに対して書き込み操作が行われるフェイルセーフには、反対のことが当てはまります。
誰かが ConcurrentSkipListSet にフェイルセーフがある方法を説明できますか? コレクションを変更するとき (CopyOnWrite クラスのように) コピーはありません。Iterator の一貫性が弱いため、読みました。ドキュメントを読みましたが、まだ理解できません。(しかし、同時実行におけるコードの可視性または事前発生関係が何であるかは知っています)。
私は初心者なので、論理的で覚えやすい説明を持っている人はいますか?
//例:
ConcurrentSkipListSet<Integer> set = new ConcurrentSkipListSet<>();
set.add(1);
set.add(2);
set.add(3);
set.add(4);
Iterator<Integer> iterator = set.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
set.remove(4);
}
OUTPUT:
1
2
3
ここで ConcurrentException がスローされることを期待していました..助けてください:(