HashMap源码分析线程不安全

HashMap 源码分析线,为啥线程不安全?

为啥呢,接着往下看看。1.8版本的。
主要原因是HashMap在put的时候会导致多线程下结果不一致!
上一篇文章讲解HashMap的源码,当然么有每个方法都讲,只讲了get()和put()和构造方法。剩下的自己看看就OK了,不过重点应该都涉及到了… … 吧!
进入正题!!!
现在我们来单线程的put一下 图解:
在这里插入图片描述
出入完成后是这样的
在这里插入图片描述
多线程下就会有问题:
假设我们有两个线程,A线程B线程。同时插入两对 key-value,并且通过key的计算出来hash最后几位是相同的。也就是我要插入在数组一样下标位置下的链表中。
当A线程先执行put时,A线程把红圈的位置走完了,随后A线程的时间片也用完了,这是B线程后起勃发一路畅通直接执行到了蓝色圈或者是执行完整个方法了。这时切回到A线程继续执行,这时A线程持有的数据都已经过期了,A线程手里的P.next 还是空的 ,可A线程自己并不知道还是按照原路线奔跑。这时候就会出现不正确的结果。B线程的活就白干了!!!
在这里插入图片描述
在这里插入图片描述
在之前的1.7版本中resize方法还有出现一个死循环的问题?!,不过1.8不会在有这个小问题了。
1.7 HashMap的死循环是源码中 transfer方法中最后一句导致的 e = next;
具体原因就给大家分享两个文章吧! 我懒了。不想写!
https://mp.weixin.qq.com/s?__biz=MzI2NjA3NTc4Ng==&mid=2652079766&idx=1&sn=879783e0b0ebf11bf1a5767933d4e61f&chksm=f1748d73c6030465fe6b9b3fa7fc816d4704c91bfe46cb287aefccee459153d3287172d91d23&scene=21#wechat_redirect

https://blog.csdn.net/chisunhuang/article/details/79041656

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值