編集された質問:
コードに記載されているように、HashSet と HashMap はフェイルファーストです (ただし、保証されていません)。
void goHashSet() {
Set set = new HashSet();
for (int i = 1; i <= 10; i++) {
set.add(i);
}
Iterator i = set.iterator();
while (i.hasNext()) {
// set.add(16);//Exception in thread "main"
// java.util.ConcurrentModificationException
System.out.println("HashSet >>> itertor >>>" + i.next());
}
}
今、私が
知っている限り、例とコレクションがフェイルセーフであることを望みます:
私が欲しいものとそれをどのように達成したかの編集と理解:
HashMap を使用する場合
void goHashMap() {
Map mp = new HashMap();
for (int i = 19; i <= 24; i++) {
mp.put(i, "x");
}
Set setKeys = mp.keySet();
Iterator i = setKeys.iterator();
while (i.hasNext()) {
// mp.put(499, "x");// Exception in thread "main"
// java.util.ConcurrentModificationException
System.out.println("HashMap >>> itertor >>>" + i.next());
}
}
ConcurrentMException を取得します
しかし、同じコードが ConcurrentHashMap で実行され、エラーはありません (非マルチスレッド環境)
void goConcurrentHashMap() {
Map mp = new ConcurrentHashMap();
for (int i = 19; i <= 24; i++) {
mp.put(i, "x");
}
Set setKeys = mp.keySet();
Iterator i = setKeys.iterator();
while (i.hasNext()) {
mp.put(499, "x");
System.out.println("HashConcurrentMap >>> itertor >>>" + i.next());
}
}
さらに、マルチスレッド環境では、ConcurrentHashmap がフェイルファストになり、例外 CME をスローする可能性があります