钱塘江上潮信来,今日方知我是我
005-为什么ConcurrentHashMap 不支持 key 或 value 为 null?
005-为什么ConcurrentHashMap 不支持 key 或 value 为 null?

005-为什么ConcurrentHashMap 不支持 key 或 value 为 null?

核心原因是消除歧义。

ConcurrentHashMap是为并发环境设计的,如果允许 value为null,调用 get(key)返回null时,你没法判断是key不存在还是 value 本身就是null。

单线程下这个问题可以用containsKey 来区分,但在并发环境下,这两步操作之间可能有其他线程在修改map,导致判断失效。DougLea设计时直接禁止null,从根源上避免了这种歧义。并发场景下的歧义问题:
1.线程A调用get(key)返回null
2.线程A调用containsKey(key)想确认key是否存在
3.在这两步之间,线程B可能执行了 put(key, value)或remove(key)
4.导致线程A的判断结果不可靠

另一个原因是简化实现。如果允许null,put、get、containsKey这些方法都得加额外逻辑去处理空值情况,代码复杂度上升,出bug的概率也会增加。

输入,输出,复盘,重复。

📊 本站数据

文章总数

12

本文阅读

0