HashMap多线程操作不安全

JDK1.8之前HashMap在多线程操作的时候会造成环形结构,导致死循环。具体成环原因和怎么成环,参考这篇写得很好的博客:为什么HashMap线程不安全

JDK1.8开始,HashMap由链表的头插法改变成了尾插法,因此不再会造成死循环,改成尾插法也是为了能够更好的维护jdk1.8中HashMap的红黑树结构。

JDK1.8和之前版本多线程操作HashMap都会在put的时候导致数据不一致或者丢失和覆盖。参考文章:https://blog.csdn.net/Hzt_fighting_up/article/details/78737468

在JDK1.8中还进行了对resize方法的优化,在JDK1.8之前是对key重新进行hash计算得出在新扩容的table中的位置 hash&(newCap-1),而在JDK1.8中是按照扩容后的规律计算得到数据在扩容后的位置(即:扩容后的位置 = 原位置 or 原位置+旧容量)

JDK1.7和JDK1.8中HashMap的区别强烈建议看这篇文章,非常全面:Java源码分析:HashMap 1.8 相对于1.7 到底更新了什么?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值