曹耘豪的博客

Java Map.computIfAbsent 死循环问题

  1. 总结

先看一下代码

1
2
3
4
5
6
Map<String, Integer> map = new HashMap<>();
map.computeIfAbsent("a", (k) -> {
map.put("a", 1);
return 0;
});
System.out.println(map); // 请读者思考一下,会输出什么?

输出:

{a=0}

如果使用 ConcurrentHashMap

1
2
3
4
5
6
Map<String, Integer> map = new ConcurrentHashMap<>();
map.computeIfAbsent("a", (k) -> {
map.put("a", 1);
return 0;
});
System.out.println(map); // 输出什么?

输出:

死循环,不会输出

总结

ConcurrentHashMap 的 key 和 value 不能为 null

   /