周末、ConcurrentHashMap、一个Bug

做一个积极的人编码、改bug、提升自己我有一个乐园,面向编程,春暖花开!真正的努力,从来都不是埋头苦干,还要时不时的偷偷懒周末周末了,有一段时间没用周末加班了。今天下午在家了加了会班,写了一会代码,因为下周要请一天假,而我手头的工作还有一些没有搞定,只能抽点时间赶赶进度。我所在的城市今天下着小雨,天气变得冷了起来。坐在电脑前,开着暖风机,不至于让敲代码的冻着(…

大家好,又见面了,我是全栈君。

做一个积极的人
编码、改bug、提升自己

我有一个乐园,面向编程,春暖花开!

周末、ConcurrentHashMap、一个Bug

真正的努力,从来都不是埋头苦干,还要时不时的偷偷懒

周末

周末了,有一段时间没用周末加班了。今天下午在家了加了会班,写了一会代码,因为下周要请一天假,而我手头的工作还有一些没有搞定,只能抽点时间赶赶进度。

我所在的城市今天下着小雨,天气变得冷了起来。坐在电脑前,开着暖风机,不至于让敲代码的冻着(唉 ,真的冻手但是还没到要开空调,忍忍~)。

写代码的时候,在调试的遇到了一个问题,真的很小的一个问题(就如标题所写的问题),但是我还是想写一下,顺便扯扯淡。最近也好久没用写东西了,原因有二:
一个是XX
一个是YY

有时候羡慕莎士比亚,羡慕他的天份,能够写出了人世的喜怒哀乐。而我想写一些和代码的“悲欢离合”,也苦于没有半点天份,不能实现。

ConcurrentHashMap、一个Bug

扯远了,今天的主题不是周末,而是主题:ConcurrentHashMap、一个Bug

我在写业务代码的时候,之前用HashMap存点东西,但是可能存在并发操作,我就换了一个高端一点的ConcurrentHashMap,然后在调试的时候出现了NullPointerException 异常。

于是一个我debug了一下,发现一个null的数据存进去后,代码就给我抛了这个异常。真的是高端了,我是使用HashMap存没有问题,这个就不行了。

于是排查ConcurrentHashMap源码,发现了在put的时候有下面这一行代码,这不就很清晰了麽,不用在费话了。

周末、ConcurrentHashMap、一个Bug我的bug啊.png

但是我不能到这里就Stop了。于是我又去查了ConcurrentHashMap API,如下:

周末、ConcurrentHashMap、一个BugConcurrentHashMap 介绍.png

其他的大篇幅内容不做介绍,注意这句:此类与 Hashtable 相似,但与 HashMap 不同,它不 允许将 null 用作键或值。

那就意味着:ConcurrentHashmapHashtable都是支持并发的,二者规定key,value均不能为null,null的话,会抛出空指针异常。又看了一下HashMap ,它允许key和value为null。

知道这个了,那为什么要这样设计呢?查资料看到,stackoverflow上面有这样一篇介绍:
why-does-concurrenthashmap-prevent-null-keys-and-values

周末、ConcurrentHashMap、一个Bug

看了英文,大致理解:

不使用nulls的主要原因是在并发的情况下会存在歧义。如果map.get(key)返回是null,不能检测出是这个key创建映射的时候就是null,还是没有映射过。不是并发映射中,可以通过map.contains(key)在检查,而在并发映射中,两次调用之间的映射可能已经更改。

总结

好了就到这里了,要开始总结了。不会总结太多,因为人们总是喜欢遗忘。请在遗忘之前记住这下面这一段,能够避免我今天的这个bug。
ConcurrentHashmapHashtable不允许key和value为null,而HashMap ,它允许key和value为null。

如果你记忆力好的话,记住上面的这一句之后,还能记住上面的分析,为什么这样设计,那就更好了。

今天写了这个小bug,还真是有点丢人(我真的太水了,这都不会~),但是从这个bug里面也学习到了:
1、基础的知识点要夯实;
2、出现问题(写了bug),在找到解决方案后,最好能分析下问题的原因是什么

希望你看完本篇能够有所收获,我是一个流浪的杀手,祝你周末愉快~

PS:看到这里了,不要忘记给我一个赞,虽然不能暖手,但可以暖心❤️~

 

 

 Java编程技术乐园:一个分享干货编程技术知识的公众号。

周末、ConcurrentHashMap、一个Bug

后台回复秘籍,获取珍藏Java武学秘籍

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120986.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 《数据结构》C语言版(清华严蔚敏考研版) 全书知识梳理 + 练习习题详解(超详细清晰易懂)

    《数据结构》知识梳理,适合考前复习,高分冲刺。包含大量习题,偷偷告诉你,考试就考这个

    2022年4月18日
    85
  • static使用方法小结

    static使用方法小结

    2021年12月14日
    48
  • 锐捷交换机配置手册完整

    锐捷交换机配置手册完整锐捷S3550配置手册第一部分:交换机概述一:交换机的几种配置方法本部分包括以下内容:控制台远程登录其它配置方法本部分内容适用于交换机、路由器等网络设备。 控制台用一台计算机作为控制台和网络设备相连,通过计算机对网络设备进行配置。1、硬件连接:把Console线一端连接在计算机的

    2022年6月15日
    82
  • 深度相机(一)–TOF总结

    深度相机(一)–TOF总结1.1TOF初探TOF是Timeofflight的简写,直译为飞行时间的意思。所谓飞行时间法3D成像,是通过给目标连续发送光脉冲,然后用传感器接收从物体返回的光,通过探测光脉冲的飞行(往返)时间来得到目标物距离。这种技术跟3D激光传感器原理基本类似,只不过3D激光传感器是逐点扫描,而TOF相机则是同时得到整幅图像的深度信息。TOF相机与普通机器视觉成像过程也有类似之处,都是由光源

    2022年5月18日
    66
  • Java开发人员必须掌握的两个Linux魔法工具(四)

    子曰:“工欲善其事,必先利其器。“做一个积极的人 编码、改bug、提升自己 我有一个乐园,面向编程,春暖花开!学习应该是快乐的,在这个乐园中我努力让自己能用简洁易懂(搞笑有趣)的表达来讲解知识或者技术,让学习之旅充满乐趣,这就是写博文的初心。故事旁白:在哈利波特的电影中,每个巫师都有一根自己的魔法棒,魔法棒是用来施展魔法的。而今天我们也要学会使用魔法棒(工具)来施展我们的魔法。魔法地…

    2022年2月28日
    39
  • myeclipse注册码获取

    myeclipse注册码获取首先在myeclipse随便新建一个javaproject,然后在默认的package中新建一个java文件我名字命名为MyEclipseGen,下面是代码:importjava.io.*;publicclassMyEclipseGen{privatestaticfinalStringLL=”Decompilingthiscopyrighted…

    2022年9月28日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号