周末、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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python PyPDF2、pdfplumber 提取 PDF 文本、图片内容

    Python PyPDF2、pdfplumber 提取 PDF 文本、图片内容PythonPyPDF2、pdfplumber提取PDF文本、图片内容PythonPyPDF2、pdfplumber提取PDF文本、图片内容安装库安装pdfplumber安装PyPDF2内容提取代码图片提取文本提取完整代码PythonPyPDF2、pdfplumber提取PDF文本、图片内容说明本方法提取的图片并不算完整,我测试用的是阿里2017年双十一的一份P…

    2022年6月23日
    25
  • atof函数_log函数怎么比较大小

    atof函数_log函数怎么比较大小atof函数原型doubleatof(constchar*str);作用:将字符串转换为双精度浮点数(double).头文件:#include<stdlib.h>返回值: 返回转换后的浮点数,如果字符串str不能被转换为double,那么返回0.0函数说明:atof()会扫描茶树str字符串,跳过前面的空格字符,直到遇到数字或者正…

    2025年8月20日
    4
  • Python 奇淫技巧 — 利用pandas读取xml转换为excel

    Python 奇淫技巧 — 利用pandas读取xml转换为excel因为工作需要,将xml中特定的节点值取出来,然后统计到excel中。于是乎试试写了一个python脚本,加快工作效率。而且今后还能复用。以下为完整示例,需要的朋友们可参考。示例XML<?xmlversion=”1.0″encoding=”utf-8″?><breakfast_menu><food><name>BelgianWaffles</name><price>$5.95

    2022年8月22日
    15
  • MongoDB(五)—-MongoDB中的索引类型

    MongoDB(五)—-MongoDB中的索引类型

    2020年11月12日
    210
  • PhotoShop算法实现进阶-浮雕滤镜-灰度浮雕(三十一)

    PhotoShop算法实现进阶-浮雕滤镜-灰度浮雕(三十一)PhotoShop算法实现进阶-浮雕滤镜-灰度浮雕(三十一)kezunhai@gmail.comhttp://blog.csdn.net/kezunhai    浮雕效果可谓花样百出,但他们主要是基于图像相邻像素的差值来实现的。对于大多数图像而

    2022年6月20日
    33
  • springcloudfeign原理面试题_微服务feign作用

    springcloudfeign原理面试题_微服务feign作用Feign原理简述启动时,程序会进行包扫描,扫描所有包下所有@FeignClient注解的类,并将这些类注入到spring的IOC容器中。当定义的Feign中的接口被调用时,通过JDK的动态代理来生成RequestTemplate。 RequestTemplate中包含请求的所有信息,如请求参数,请求URL等。 RequestTemplate声明Request,然后将Request交给cl…

    2022年9月26日
    2

发表回复

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

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