【问题标题】:ConcurrentHashMap IterationConcurrentHashMap 迭代
【发布时间】:2016-05-30 20:02:09
【问题描述】:

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

【问题讨论】:

  • 没有人可以帮助我吗?

标签: java iterator concurrenthashmap


【解决方案1】:

来自ConcurrentHashMap.entrySet() 的文档:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-22
    • 2014-01-28
    • 2016-01-16
    • 2013-10-12
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多