为什么迭代器会输出不同的输出(与故障保护相关)?
public class failSafe {
public static void main(String[] args) {
Map<Integer,Integer> student = new ConcurrentHashMap<>();
//Defining a new HashMap
student.put(3, 5);
student.put(2,10);
Iterator<Integer> itr = student.keySet().iterator();
while(itr.hasNext()){
System.out.println(student.get(itr.next()));
//student.put(4,40); will print 40 also
student.put(1,89);
//will not print 89.
}
`` }
}
答案 0 :(得分:3)
ConcurrentHashMap
的迭代器不是故障安全的。它是weakly consistent。它保证在元素创建时作为Javadocs状态对元素的快照进行操作:
类似地,Iterators,Spliterators和Enumerations在迭代器/枚举的创建时或之后的某个时刻返回反映哈希表状态的元素。
它不保证在创建后反映新添加的元素。