【图解】面试题:为什么HashMap会产生死循环
注意:HashMap死循环只会发生在JDK1.7,根本原因是由采用头插法在多线程下的扩容规则所致
(1)JDK1.7中HashMap采用底层结构是数组+链表,在key值发生hash碰撞后,元素entry会采用头节点的插入方式,插入到链表的头部
(2)数组长度到达负载临界值触发数组扩容,由于是头插法,原来链表的顺序是A->B->C,扩容后变为C->B->A
(3)假设同时有线程T1与T2对数组进行扩容
- T1、T2同时指向A节点,那么T1.next与T2.next同时指向B节点。
- 假设T2让出时间片,T1线程先进行扩容,那么T1线程执行后的结果是链表的结构变为C->B->A,此时T2的没有感知,在其工作内存中仍然是T2指向A,T2.next指向B。
- 此时T2恢复执行,死循环就此产生。
只有经历过才能得到成长
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战