fail-fast
の動作を確認するためにjava.util.HashMap
と遊んでいました。java HashMapの高速動作が失敗する
HashMap map = new HashMap();
map.put("jon", 10);
map.put("sean", 11);
map.put("jim", 12);
map.put("stark", 13);
map.put("vic", 14);
Set keys = map.keySet();
for(Object k:keys) {
System.out.println(map.get(k));
}
for(Object k:keys) {
String key =(String)k;
if(key.equals("stark")) {
map.remove(key);
}
}
System.out.println("after modifn");
for(Object k:keys) {
System.out.println(map.get(k));
}
は私が
12
11
10
14
13
after modifn
12
11
10
14
は、私も、私はどちらの場合も任意のConcurrentModificationException
を取得できませんでしたこれをイテレータ
Iterator<String> itr = keys.iterator();
while(itr.hasNext()) {
String key = itr.next();
if(key.equals("stark")) {
map.remove(key);
}
}
を..Is使用してみました結果を得たので(javadocのから)
iteraのフェイル・ファーストの動作一般的に言えば、同期していない同時変更が存在するかどうかの確かな保証は不可能です。フェイルファスト イテレータは、私は、それはあなたが..what思います
ConcurrentModificationException
を投げる予定だという別のthreadチェックベストエフォート方式
にConcurrentModificationExceptionを投げますか?あなたが示された出力を考えると
'remove()'ではなく 'clear()'を呼び出してみてください。 – Bringer128