Tôi đã phát xung quanh với java.util.HashMap
để tìm hiểu xem hành vi của fail-fast
là gì.không hoạt động nhanh của 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));
}
tôi đã có kết quả
12
11
10
14
13
after modifn
12
11
10
14
Tôi cũng đã cố gắng sử dụng một iterator
Iterator<String> itr = keys.iterator();
while(itr.hasNext()) {
String key = itr.next();
if(key.equals("stark")) {
map.remove(key);
}
}
tôi không nhận được bất kỳ ConcurrentModificationException
trong cả hai trường hợp ..Is này vì (từ javadoc)
hành vi không nhanh của một lần lặp tor không thể được đảm bảo như nó là, nói chung, không thể thực hiện bất kỳ đảm bảo cứng trong sự hiện diện của sửa đổi đồng thời không đồng bộ. Thất bại nhanh lặp ném ConcurrentModificationException trên cơ sở nỗ lực tốt nhất
Tôi đã kiểm tra khác thread mà nói, nó sẽ ném ConcurrentModificationException
..what Bạn nghĩ?
Hãy thử gọi 'clear()' thay vì 'remove()'. – Bringer128