为啥不支持key-value为null呢?

请问为什么HashTableConcurrentHashMap不支持key-value为null呢?

  • 我的理解如下:

    ConcurrentHashMap源码中 设计了key-value不能为null,null的话为抛出异常
    为什么这么设计
    以value为例
    假设value可以为null
    在高并发环境下,获取value值为null时可能有两种情况:

    1. value 本身就为null;
    2. 其他线程删除了key,返回null。
      在value可以为null的前提下,因为无法确定是什么因素导致了返回null,所以这种设计是有缺陷的
      所以在源码设计上,需要加上value不能为null的限制,
      这样如果返回null,那只能是其他线程删除key造成的了
      参考了stackoverflow上的一些解答
  • 看到一篇博文是这么解释的:

    图片说明
    我没想通,觉得这个逻辑有点问题,“ConcurrentHashMap中不允许value为null”这个是结论,不能用结论作为条件来推出结论。

  • 真相到底是啥呢?最近才接触,真小白,希望高人指点一波。谢谢了!!!

全部评论
😅 他逻辑确实有点儿清奇,而且也是有问题的。 你的理解是正确的,防止在并发情况下,出现返回结果的语义不确定的情况。 即返回null你无法确认这个null的具体语义是什么。阿里规约好像也是不建议返回null的。
点赞
送花
回复
分享
发布于 2018-11-26 10:07
原博犯了循环论证的逻辑错误
点赞
送花
回复
分享
发布于 2018-11-26 10:14
滴滴
校招火热招聘中
官网直投
stackoverflow
点赞
送花
回复
分享
发布于 2018-11-26 10:28

相关推荐

2 8 评论
分享
牛客网
牛客企业服务