ConcurrentHashMap迭代

时间:2016-05-30 20:02:09

标签: java iterator concurrenthashmap

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

1 个答案:

答案 0 :(得分:1)

来自ConcurrentHashMap.entrySet()的文档:

  

视图的迭代器是一个“弱一致”的迭代器,它永远不会抛出ConcurrentModificationException,并保证遍历构造迭代器时存在的元素,并且可能(但不保证)反映后续的任何修改施工。