gpt4 book ai didi

java - 迭代时清除 ConcurrentHashMap 中的元素

转载 作者:行者123 更新时间:2023-12-04 20:39:44 42 4
gpt4 key购买 nike

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

为什么?

最佳答案

循环结束后可以看到变化。您可以再次打印 map 以查看差异。它将是空的。我想添加 @waldheinz 的一部分的 answer :

What happens if you put or remove a value from the map while iterating it?

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

关于java - 迭代时清除 ConcurrentHashMap 中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38473072/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com