解析JDK1.7 HashMap 头插法生成的环形链表死循环问题

背景

在JDK1.7中HashMap使用头插法来添加同一位置上的节点,但是在并发的情况下使用HashMap,在进行resize()扩容的过程中,链表可能会形成环状,当在读取HashMap元素的时候会出现死循环,CPU占用飙高,服务器崩溃的问题。

扩容前

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rdYq7lGS-1616669872089)(F46729288FEE4C75B8753437F34F9762)]

正常 resize() 后

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8AXDis96-1616669872092)(8C2CA8AB385540999C6D5251E363BFC8)]

并发 resize() 形成环状

在下面我会说明是如何生成该环状

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6HwOVWDf-1616669872093)(940F857CD36B4148A6DE9DFF9F1BED66)]

正常扩容resize()的过程

<

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值