问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

震惊!ConcurrentHashMap里面也有死循环,作者留下的“彩蛋”了解一下...

发布网友 发布时间:2024-10-02 11:20

我来回答

1个回答

热心网友 时间:2024-10-02 21:30

在探讨一个近期发现的JDK 8的BUG时,我们了解到Dubbo 2.7.7版本更新点的描述中,涉及到了与JDK相关的修复。这个BUG实际上是位于闻名的concurrent包中的computeIfAbsent方法。在JDK 9中被修复,修复者正是Doug Lea。由于ConcurrentHashMap就是Doug Lea的杰作,这个BUG可以被视作“谁污染谁治理”。为了理解这个BUG的成因,需要先了解computeIfAbsent方法的用途。

computeIfAbsent方法的目的是当Map中某个key对应的值不存在时,通过调用mappingFunction函数并返回该函数执行结果(非null)作为key的值。如初始化一个ConcurrentHashMap,第一次获取名为why的value,若未获取到,则返回null。接着调用computeIfAbsent方法获取null后,调用getValue方法,将返回值与当前key关联起来。因此,第二次获取时能拿到"why技术"。

了解了方法的用途,接下来揭示这个BUG。通过链接,我们看到具体的描述指向了concurrent包中的computeIfAbsent方法。这个BUG在JDK 9中被修复,修复人正是Doug Lea。要理解BUG,需要先了解这个方法的工作流程。在JDK 8之后,computeIfAbsent方法提供了第二个参数mappingFunction,该方法的含义是当前Map中key对应的值不存在时,调用mappingFunction函数,并将该函数的执行结果(非null)作为该key的value返回。

通过一系列代码演示,我们发现正常情况下,Map应该显示{AaAa=42,BBBB=42},但在JDK 8环境中运行给定的测试用例时,方法不会结束,而是陷入了死循环。这就是BUG。

在这个BUG被发现的过程中,提问的艺术也发挥了重要作用。Doug Lea和Pardeep在讨论中展示了提问和回答的策略。Pardeep提供的测试案例是转折点,它清晰地指出了问题所在。Doug Lea在问题提出后不久给出了回复,提出了解决问题的可能性,并且在后续的讨论中逐步明确了这个BUG的存在以及可能的解决方法。最终,这个BUG在JDK 9中得到了修复。

这个BUG的成因在于computeIfAbsent方法内部的另一个computeIfAbsent调用,导致了两个方法在处理相同的key时进入了死循环。在处理此BUG时,我们需要深入理解computeIfAbsent方法的工作流程。从代码分析中可以看出,当key为"AaAa"和"BBBB"时,它们在进行计算和存储操作时,由于key的哈希值相同,导致了循环条件无法满足break的情况,从而进入了死循环。

总结这个BUG,我们发现当key的哈希值相同时,多次调用computeIfAbsent方法会导致死循环。Doug Lea在JDK 9中通过增加判断条件,避免了这种循环情况,从而修复了这个BUG。对于使用JDK 8的开发者,可以通过将computeIfAbsent方法的使用方式调整为先调用get方法,再使用putIfAbsent方法,以此避免遇到这个BUG。此外,我们还提到了线程安全问题,即虽然ConcurrentHashMap本身是线程安全的,但在使用时仍需注意避免线程冲突,以确保程序的正确性。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
少儿学什么舞蹈 青年学什么舞蹈好 成年人学什么舞蹈 福州企业最低工资标准 2013年厦门的底薪是多少 生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 养宠物的人遵守规则,是不是就能和别人平安相处呢? HashMap中的put和putIfAbsense区别 特斯拉进口和国产后有什么区别? 特斯拉Model 3的外观漂亮吗?有什么吸引人的设计吗? 抖店开旗舰店商标注册证和法人必须是同一个吗? 联想一体机能不能自己加内存和CPU? 和田玉纤维交织结构是什么意思 和田玉纤维交织结构简单介绍 腐男是什么意思&rq=腐女是什么意思&sa=brs ...会变成真正的gay吗?腐男如果弯了,他滴性向是什么呢?gay还是双性恋... 如何了解山东地区的grc市场行情及产品报价? 山东济南有哪些搞grc生产的厂家? 一种简单、直接的无人车/船 激光雷达 导航、路径规划方法 无人深空构造体飞船怎么弄 什么是无人船 子女的赡养义务是什么 赡养人的赡养义务具体有什么 形容做事犹豫的成语 求女生繁体字长的个性网名? 平行志愿投档规则是什么 平行志愿是什么原则? 平行志愿的原则是什么? Nacos源码系列—服务端那些事儿 医学美容技术有什么学校? PROTEL的版本历程 学美容的大学哪个好 刚上大一,学电子信息专业,买一个5000左右的笔记本电脑,主要用于学习... 怎样才能让老公不出轨 屁股上有白色条纹是缺东西吗 女人屁股上有白色条纹怎么回事 已经拿钱报名上北京公安大学继续教育学院了,我知道承认自考,知道不好... 请问中国人民公安大学继续教育学院(北京团河校区的)怎样报考,我是内蒙... 为什么屁股上有白纹 上海本帮菜的烹饪技巧有哪些? 上海本帮菜的常用烹饪方法有什么? 上海菜有哪些独特的烹饪方式? 上海菜中是什么意思 烹饪上海菜的注意事项有什么? 视网膜是相机的什么 什么是视网膜病变 We haven’t decided ___ we will go there for a picnic tomorrow... 安和桥在哪里