在迭代时清除ConcurrentHashMap中的元素

时间:2016-07-20 05:38:38

标签: java dictionary concurrenthashmap

这是我对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

为什么?

1 个答案:

答案 0 :(得分:6)

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

  
    

如果在迭代时从地图中添加或删除某个值会发生什么?

  
     

如果你这样做(保证{strong}}中的“并发”的一部分),保证不会破坏。但是,无法保证一个线程会看到另一个线程执行的映射更改(无需从映射中获取新的迭代器)。保证迭代器在创建时反映地图的状态。进一步的更改可能会反映在迭代器中,但它们不一定是。