这是我对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
为什么?
答案 0 :(得分:6)
循环结束后,您可以看到更改。您可以再次打印出地图以查看差异。它会是空的。我想添加@waldheinz的answer的一部分:
如果在迭代时从地图中添加或删除某个值会发生什么?
如果你这样做(保证{strong}}中的“并发”的一部分),保证不会破坏。但是,无法保证一个线程会看到另一个线程执行的映射更改(无需从映射中获取新的迭代器)。保证迭代器在创建时反映地图的状态。进一步的更改可能会反映在迭代器中,但它们不一定是。