gpt4 book ai didi

java - 无法在并发 HashMap 中添加元素 - 为什么?

转载 作者:行者123 更新时间:2023-12-02 10:47:59 25 4
gpt4 key购买 nike

为了理解Concurrent HashMap

,编写了以下测试代码

我的问题是代码没有按预期工作,我认为它最终会进入无限循环,其中 JVM 不会终止。

public class Test {
public static void main(String[] args) {
Map<Long, Long> map = new ConcurrentHashMap<>();
map.put(0L, 0L);
map.put((1L << 32) + 1, 0L);
for (long key : map.keySet()) {
map.put(key, map.remove(key));
}
}
}

我不确定为什么会发生这种情况,有人可以帮助我理解这种行为吗?

最佳答案

我不确定您到底想让代码做什么,但是您认为代码陷入无限循环是正确的。下面的行是创建无限循环的内容:

map.put(key, map.remove(key)); 

concurrent hash map documentation 对于 remove 方法来说:

... returns the previous value associated with key, or null if there was no mapping for key

因此,您的代码只是迭代 map ,用当前值更新每个条目。如果 map 只有 1 个条目,它将跳出 for 循环。

关于java - 无法在并发 HashMap 中添加元素 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52401993/

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