フェイルセーフイテレーターは、throw
ConcurrentModificationException
ではありません。フェイルセーフイテレーターと弱く一貫性のあるイテレーター
fail safe iterators
とweakly consistent iterators
の違いは何ですか?
どちらも同じですか?
フェイルセーフイテレーターは、throw
ConcurrentModificationException
ではありません。フェイルセーフイテレーターと弱く一貫性のあるイテレーター
fail safe iterators
とweakly consistent iterators
の違いは何ですか?
どちらも同じですか?
Fail-safe
ととの両方とも、イテレータはConcurrentModificationException
を投げません。 CAS(比較交換)に依存している
weakly consistent iterators:
コレクションは、いくつかを反映するが、弱一貫性反復子を、持っていない必ずしもすべてが作成されたので、その裏のコレクションに加えられた変更の。たとえば、イテレータが到達する前にコレクション内の要素が変更または削除された場合、これらの変更は確実に反映されますが、挿入の保証はありません。
Fail safe iterator
イテレータメカニズムは、内部コレクションデータ構造体のコピーを作成し、それを使用して要素を反復処理します。これにより、基礎となるデータ構造が変更された場合に、同時の変更例外がスローされることを防ぎます。もちろん、アレイ全体をコピーするオーバーヘッドが導入されています。
public CopyOnWriteArrayList(Collection<? extends E> c) {
Object[] elements = c.toArray();
if (elements.getClass() != Object[].class)
elements = Arrays.copyOf(elements, elements.length, Object[].class);
setArray(elements);
}
参考:
Java Generics and Collections: 11.5. Collections and Thread Safety
Iterators – Fail fast Vs Fail safe
CopyOnWriteArrayList
は我々が簡単にコンストラクタのソースを見ることによって見ることができるフェイルセーフイテレータ、とそのような実装であります
http://stackoverflow.com/q/14084104/469220 – Vlad
どちらも同じではありません。 –
http://stackoverflow.com/questions/14084104/concurrenthashmap-returns-a-weakly-consistent-iterator-why-should-we -use-it-any –