为我对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));
}
}
}
我不确定为什么会这样,有人可以帮助我理解这种行为吗。
答案 0 :(得分:1)
我不确定您打算执行什么代码,但是您认为代码陷入无限循环是正确的。下面的行是创建无限循环的原因:
map.put(key, map.remove(key));
remove
方法的concurrent hash map documentation 指出:
...返回与key关联的先前值;如果没有key映射,则返回null
因此,您的代码只是在地图上迭代,用其当前值更新每个条目。如果地图只有1个条目,它将退出for循环。