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

时间:2018-09-19 08:59:10

标签: java concurrenthashmap

为我对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));
        }
    }
}

我不确定为什么会这样,有人可以帮助我理解这种行为吗。

1 个答案:

答案 0 :(得分:1)

我不确定您打算执行什么代码,但是您认为代码陷入无限循环是正确的。下面的行是创建无限循环的原因:

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

remove方法的concurrent hash map documentation 指出:

  

...返回与key关联的先前值;如果没有key映射,则返回null

因此,您的代码只是在地图上迭代,用其当前值更新每个条目。如果地图只有1个条目,它将退出for循环。