为啥不支持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

相关推荐

预计下个星期就能开奖吧,哪位老哥来给个准信
华孝子爱信等:对接人上周说的是这周
点赞 评论 收藏
分享
霁华Tel:秋招结束了,好累。我自编了一篇对话,语言别人看不懂,我觉得有某种力量在控制我的身体,我明明觉得有些东西就在眼前,但身边的人却说啥也没有,有神秘人通过电视,手机等在暗暗的给我发信号,我有时候会突然觉得身体的某一部分不属于我了。面对不同的人或场合,我表现出不一样的自己,以至于都不知道自己到底是什么样子的人。我觉得我已经做的很好,不需要其他人的建议和批评,我有些时候难以控制的兴奋,但是呼吸都让人开心。
点赞 评论 收藏
分享
像好涩一样好学:这公司我也拿过 基本明确周六加班 工资还凑活 另外下次镜头往上点儿
点赞 评论 收藏
分享
2 8 评论
分享
牛客网
牛客企业服务