程序员■Java程序员必知:HashMap进行put操作会不会引起死循
HashMap进行put操作会引起死循环?
最近在磕《java并发编程艺术》 , 在看到第六章的时候出现了下面这段我不是很理解的东西 , 如下
《java并发编程艺术》截取
为什么要使用ConcurrentHashMap
在并发编程中使用HashMap可能导致程序死循环 。 而使用线程安全的HashTable效率又非常低下 , 基于以上两个原因 , 便有了ConcurrentHashMap的登场机会 。
1. 线程不安全的HashMap
在多线程环境下 , 使用HashMap进行put操作会引起死循环 , 导致CPU利用率接近100% , 所以在并发情况下不能使用HashMap 。 例如 , 执行以下代码会引起死循环 。
HashMap在并发执行put操作时会引起死循环 , 是因为多线程会导致HashMap的Entry链表形成环形数据结构 , 一旦形成环形数据结构 , Entry的next节点永远不为空 , 就会产生死循环获取Entry 。
结论
1. JDK1.8之前 , 为了提高rehash的速度 , 冲突链表是使用头插法 , 因为头插法是操作速度最快的 , 找到数组位置就直接找到插入位置了 , 头插法在多线程下回引起死循环
2.JDK1.8之后开始加入红黑树 , 当链表长度大于8时链表就会转换成红黑树 , 这样就大大提高了在冲突链表查找的速度 , 同时因为链表的长度不可能大于8 , 链表在rehash的消耗就小很多 , 所以JDK1.8使用尾插法也避免了死循环问题
————————————————
版权声明:本文为CSDN博主「眯着小眼睛看着大世界」的原创文章 , 遵循CC 4.0 BY-SA版权协议 , 转载请附上原文出处链接及本声明 。
【程序员■Java程序员必知:HashMap进行put操作会不会引起死循】原文链接:https://blog.csdn.net/weixin_44019182/article/details/107103854
- 『程序员』装出新高度! 程序员用代码写招租广告只因不想与其它行业人士合租
- #程序员#?8年经验程序员跳槽,2个月面试腾讯百度京东等70家公司,总结出4个共同点
- 程序员@同学在加拿大当程序员,对比国内程序员的待遇,差距这么大
- #程序员#腾讯T4:结合我多年工作经验给程序员的几点忠告,别再埋头苦干了
- 课工场郑州翔天信鸽|JavaScript最常用,java是主流,JetBrains公布编程语言排名
- 猿灯塔|POI Excel,Java架构-Apache
- 【Java】github上标星70.5k,贼火的Java突击手册,全面详细对标阿里P7
- 科技怪人|C++程序员的学习进阶之路之书籍篇
- 「程序员」百度女程序员半夜打的回家,被司机嘲讽:加班到一点收入没我高,值得吗?
- 华为■我,华为程序员,35岁被辞退,年薪百万也躲不过“失业危机”?