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版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/weixin_44019182/article/details/107103854

hashmap头插法和尾插法区别_Java程序员必知:HashMap进行put操作会不会引起死循相关推荐

  1. hashmap头插法和尾插法区别

    前言 HashMap 应该算是 Java 后端工程师面试的必问题,因为其中的知识点太多,很适合用来考察面试者的 Java 基础. 开场 面试官: 你先自我介绍一下吧! 安琪拉: 我是安琪拉,草丛三婊之 ...

  2. 头插法和尾插法的详细区别

    浅析线性表(链表)的头插法和尾插法的区别及优缺点 线性表作为数据结构中比较重要的一种,具有操作效率高.内存利用率高.结构简单.使用方便等特点,今天我们一起交流一下单向线性表的头插法和尾插法的区别及优缺 ...

  3. C语言的双向链表头插法和尾插法,指定节点删除

    文章目录 前言 头插法 尾插法 删除节点 测试代码如下 前言 双向链表和单链表的唯一区别就是多个一个指针域而已,该指针域可以访问链表的上一个节点. 关于构造双向链表的过程我们常见的有两种方法,和单链表 ...

  4. 计算机软件技术 上海电力学院,上海电力学院 计算机软件技术 实验三 用头插法和尾插法创建线性表...

    上海电力学院计算机软件技术实验三用头插法和尾插法创建线性表 #include #define MAXLEN 9 struct table {int key; int othererm; } ; typ ...

  5. 数据结构学习(二)——单链表的操作之头插法和尾插法创建链表

    http://blog.csdn.net/abclixu123/article/details/8210109 链表也是线性表的一种,与顺序表不同的是,它在内存中不是连续存放的.在C语言中,链表是通过 ...

  6. 头插法和尾插法创建链表(有无头结点)

    头插法和尾插法创建链表(有无头结点) 文章目录 头插法和尾插法创建链表(有无头结点) 1 头插法 1.1头插法建表规则: 1.2 头插法建表代码实现 2 尾插法 2.1 尾插法建表规则: 2.2 尾插 ...

  7. 单链表的头插法和尾插法c语言实现

    /*单链表的头插法和尾插法c语言实现*/ #include <stdio.h> #include <stdlib.h> #include <string.h> #d ...

  8. 采用头插法和尾插法建立单链表

    面说一下如果用C语言建立单链表,分为头插法和尾插法两种. 采用头插法建立单链表 该方法从一个空表开始,生成新结点,并将读取到的数据存放到新结点的数据域中,然后将新结点插入到当前链表的表头,即头结点之后 ...

  9. 双向循环链表的头插法和尾插法

    我们平常学链表的时候会学单向不循环链表,单向循环链表,双向不循环链表,双向循环链表及内核链表,各种格式的链表.今天我因为忘记双向循环链表的头插法和尾插法的顺序了,特意写一篇文章来巩固一下.首先我根据顺 ...

最新文章

  1. Jquery 常用方法经典总结
  2. cocos2d-js中listView的jumpToBottom()方法无效的解决方法
  3. mac下Clion与QT引入FFmpeg库
  4. python matplotlib画散点图_python matplotlib库绘制散点图例题解析
  5. HBuilderx中编译sass文件
  6. SQLite不同插入方法的效率对比测试
  7. unity透明通道加颜色_Unity的Gamma颜色空间和Linear颜色空间的小研究
  8. 如何从知网下载学位论文的PDF?
  9. linux安装程序企鹅,在Linux上安装小企鹅输入法
  10. 基于MATLAB的指纹识别系统仿真设计,基于Matlab的指纹识别系统的研究与实现
  11. python怎么让图片旋转45度_我能把x轴旋转45度吗?试着做温度图
  12. 求n的阶乘问题。输入一个正整数n,输出n!
  13. 写给情人,写给情人节,写给即将开始的新一年
  14. 【MySQL | 运维篇】06、MySQL 分库分表之 MyCat 分片规则
  15. 链表和线性表的优缺点
  16. 【matlab教程】18、删除变量
  17. 财务管理软件QuickBooks 2020 for Mac
  18. win10和win7系统配置faster rcnn(pytorch)
  19. 球半篮球分析,NBA总决赛第四场:顿凯尔特人VS勇士
  20. 【Stable Diffusion | AI 绘画】手把手教你体验--AI 生成唯美二次元

热门文章

  1. 在多线程数据平面开发套件(DPDK)应用程序中优化内存使用
  2. 【linux指令】dialog实现终端下的GUI-1
  3. 如何组织软件模块的代码结构?
  4. 获取activemq 队列所有数据_ActiveMQ的应用
  5. 电脑更新重启后黑屏_手机黑屏了,重启后万事大吉?那可就错了!
  6. python反向切片_Python-关于反向切片的小问题
  7. Django如何使用多个数据库
  8. android studio下生成aar文件,本地调用
  9. php查看音频属性,PHP获取音频mp3文件时长或音频文件其它参数属性
  10. 按键精灵bmp图片怎么导出_发光字怎么制作,招牌LED发光字工艺