还不懂HashMap死链问题?一文带你解决

首先HashMap死链问题出现在 jdk1.7 中,采用的是头插法。并且是在并发环境下发生的。

 源码大致意思为:

while(){
    保存 e.next 
    将 e 放入新数组的链表头
    e = e.next;
}

 

假设 map 中元素为 a -> b -> null

  • t1 线程中 a[e] -> b[next] -> null 被挂起
  •  t2 线程扩容过程:
    •  a -> null
    •  b -> a -> null
  •  回到 t1 线程中 b[next] -> a[e] -> null,进行扩容
    •  t1 扩容流程:
      • 扩容之后数组    ;    扩容前的数组
      • a -> null            ;        b[e] -> a[next] -> null
      • b -> a -> null    ;    b -> a[e] -> null[next]
      • a <-> b (发生死链)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值