【问题标题】:Clear elements from ConcurrentHashMap while iterating迭代时从 ConcurrentHashMap 中清除元素
【发布时间】:2016-11-23 04:57:55
【问题描述】:

这是我对 ConcurrentHashMap 的测试

@Test
public void testIt2() {
    Map<String, String> map = new ConcurrentHashMap<String, String>();
    map.put("2", "2");
    map.put("1", "1");
    for (Entry<String, String> entry : map.entrySet()) {
        map.clear();
        System.out.println(entry.getKey());
    }
}

输出是:

1
2

为什么?

【问题讨论】:

    标签: java dictionary concurrenthashmap


    【解决方案1】:

    您可以在循环结束后看到更改。您可以再次打印地图以查看差异。它将是空的。我想添加@waldheinzanswer的一部分:

    如果您在迭代时从映射中放置或删除一个值会发生什么?

    如果您这样做,可以保证事情不会中断(这是ConcurrentHashMap 中“并发”的含义的一部分)。但是,不能保证一个线程会看到另一个线程执行的对映射的更改(无需从映射中获取新的迭代器)。迭代器保证在创建时反映地图的状态。进一步的更改可能会反映在迭代器中,但不一定非要如此。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-30
      • 1970-01-01
      • 1970-01-01
      • 2012-05-13
      • 2011-02-21
      相关资源
      最近更新 更多