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 到底更新了什么?

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容