ConcurrentHashMap是线程安全的,因此我们可以在迭代时更新map的值。但是以下程序的输出并不像我预期的那样。
Map concurrentHashMap = new ConcurrentHashMap<();
concurrentHashMap.put("0", "b");
Iterator iterator = concurrentHashMap.entrySet().iterator();
concurrentHashMap.put("8", "k");
concurrentHashMap.put("2", "c");
concurrentHashMap.put("3", "d");
concurrentHashMap.put("1", "e");
while(iterator.hasNext())
{
System.out.println(""+iterator.next());
}
以上代码的输出是
0 = B
8 = K
3 = d
2 = C
预期产出
1 = E
0 = B
8 = K
3 = d
2 = C
答案 0 :(得分:1)
来自ConcurrentHashMap.entrySet()
的文档:
视图的迭代器是一个“弱一致”的迭代器,它永远不会抛出
ConcurrentModificationException
,并保证遍历构造迭代器时存在的元素,并且可能(但不保证)反映后续的任何修改施工。