现在hashmap中有三个元素,Hash表的size=2, 所以key = 3, 7, 5,在mod 2以后都冲突在table[1]这里了。

按照方法中的代码

对table[1]中的链表来说,进入while循环,此时e=key(3),那么next=key(7),经过计算重新定位e=key(3)在新表中的位置,并把e=key(3)挂在newTable[3]的位置

这样循环下去,将table[1]中的链表循环完成后,于是HashMap就完成了扩容

并发下的扩容

上面都是单线程下的扩容,当多线程进行扩容时,会是什么样子呢?

初始的HashMap还是:

我们现在假设有两个线程并发操作,都进入了扩容操作, 我们以颜色进行区分两个线程。

回顾我们的扩容代码,我们假设,线程1执行到Entry<K,V> next = e.next;时被操作系统调度挂起了,而线程2执行完成了扩容操作

于是,在线程1,2看来,就应该是这个样子

接下来,线程1被调度回来执行:

1)

2)

3)

4)

5)

6)

7)

循环列表产生后,一旦线程1调用get(11,15之类的元素)时,就会进入一个死循环的情况,将CPU的消耗到100%。

总结

HashMap之所以在并发下的扩容造成死循环,是因为,多个线程并发进行时,因为一个线程先期完成了扩容,将原的链表重新散列到自己的表中,并且链表变成了倒序,后一个线程再扩容时,又进行自己的散列,再次将倒序链表变为正序链表。于是形成了一个环形链表,当表中不存在的元素时,造成死循环。

虽然在JDK1.8中,Java的开发小组修正了这个问题,但是HashMap始终存在着其他的线程安全问题。所以在并发情况下,我们应该使用HastTable或者ConcurrentHashMap来代替HashMap。

《MySql面试专题》

《MySql性能优化的21个最佳实践》

《MySQL高级知识笔记》

文中展示的资料包括:**《MySql思维导图》《MySql核心笔记》《MySql调优笔记》《MySql面试专题》《MySql性能优化的21个最佳实践》《MySq高级知识笔记》**如下图

获取方式:点击这里前往传送门

佳实践》《MySq高级知识笔记》**如下图

[外链图片转存中…(img-luezi0TO-1628136165971)]

获取方式:点击这里前往传送门

关注我,点赞本文给更多有需要的人

Java程序员春招三面蚂蚁金服,1-7中HashMap死循环分析相关推荐

  1. Java程序员春招三面蚂蚁金服,开源掌机玩java

    选择 在现在这个浮躁而又拜金的社会,我相信很多人做技术并非出于热爱,只是被互联网的高薪吸引,毕竟技术岗位非常枯燥,不仅要面对奇奇怪怪的需求,还要不停的充实自己避免被淘汰.所以想要吃好技术这碗饭并不容易 ...

  2. Java程序员春招三面蚂蚁金服,1-3年Java开发工程师面试经验分享

    前言 为什么互联网资讯这么发达,但是没有出现技术人才井喷? 为什么会出现应届生薪资倒挂多年老员工的现象? 这个世界有太多的现象都可以用**"二八定律"**来解释. 20%拿着高工资 ...

  3. Java程序员春招三面蚂蚁金服,丹丹丹学妹哭着对我说:学长

    泛型: aas aas泛型的本质是参数化类型或者参数化多态的应用,即可以将操作的数据类型指定为方法签名中的一种特殊参数,这种参数类型能够用在类.接口和方法的创建中,分别构成泛型类.泛型接口和泛型方法. ...

  4. Java程序员春招三面蚂蚁金服,1200页文档笔记

    什么是Redis的持久化 我们知道Redis的数据都存储在内存中,如果服务器突然宕机,那么内存数据将会全部消失,为了防止这种情况出现,利用一套机制来保证数据不会因为故障而丢失,我们将这种机制称之为Re ...

  5. Java程序员秋招三面蚂蚁金服,我总结了所有面试题,也不过如此

    蚂蚁金服一面: 9月底,一天下午杭州的电话,问有没有空,果断有空,虽然感觉略显紧张,有点懵逼. 面试的题目: HashMap和Hashtable的区别 实现一个保证迭代顺序的HashMap 说一说排序 ...

  6. Java程序员秋招三面蚂蚁金服,java开发笔试题编程题

    前言 "大专人大专魂,大专都是人上人" 当我看到这句话突然就在各个平台火了之后,又开始涌现出了一批又一批抨击专科的网友. 其中有一条评论我记忆犹新:大专生努力做什么都行,就是别做程 ...

  7. Android程序员春招三面蚂蚁金服,7年老Android一次坑爹的面试经历,先睹为快

    本专栏专注分享大型Bat面试知识,后续会持续更新,喜欢的话麻烦点击一个关注 面试官: 音视频是什么,视频为什么需要压缩 心理分析:很多人对音视频的概念停留在 苍老师的小电影上,只能理解他是一个视频文件 ...

  8. Kotlin(3)-协程和操作符重载,Java程序员秋招三面蚂蚁金服

    Kotlin 文件和类不存在一对一关系 共生体 继承 修饰符 空指针问题 正文 重难点 协程 想了很久,关于协程的内容,在官网上确实有很多内容,基础知识概念,基本使用,以及 流操作,通道,异常处理,并 ...

  9. Java程序员秋招三面蚂蚁金服,java开发招聘上海

    事情是这样的 前段时间面试了阿里,大家也都清楚,如果你在简历上面写着你精通XX技术,那面试官就会跟你死磕到底. 我就是在自己的简历上写了精通MySQL,然后就开启了和阿里面试官的死磕之路,结果就是拿到 ...

最新文章

  1. Ocelot + Consul实践
  2. [原创]某页网付费简历模板下载方法
  3. Schedule Problem spfa 差分约束
  4. 【万字长文详解】Python库collections,让你击败99%的Pythoner
  5. [python爬虫] selenium爬取局部动态刷新网站(URL始终固定)
  6. ES6减少魔法操作之Reflect
  7. NB-IoT SNR RSRQ RSRP等信号参数解释
  8. LeetCode 11. 盛最多水的容器(双指针)
  9. 路畅畅云固件升级教程_斐讯K2P MTK版简单几步刷入breed教程,附刷第三方固件方法...
  10. CCF认证-2015-3-2 数字排序
  11. Centos更新配置文件命令
  12. 生鲜电商之毒,食行生鲜模式虽好、恐也难解
  13. 2021-08-27 BERT4Rec简介
  14. 呼吸流水灯c语言程序,单片机流水灯与呼吸灯结合-滴水灯程序及详细教程
  15. 开源算法六轴机械臂_我从星期六早上的漫画中学到的开源知识
  16. 川大计算机学院新生开学典礼,李怡院长2019级新生开学典礼致辞:成为一位有理想有情操有担当的川大人...
  17. iOS系列—wakeup in XNU
  18. Android API19 设置Alarm闹钟
  19. 转转品牌升级,不只换了个LOGO
  20. C++实例(十一)Excel表格操作

热门文章

  1. Dart基础-运算符
  2. SQL注入学习part03:(结合sqli-libs学习:21-30关)
  3. TikTok 与 Oracle 的交易将开创两个危险的先例
  4. 7大编程误区,你避开了吗?
  5. 不打好评不给用!苹果竟然把这种“流氓” App 都放出来?
  6. 一个堆排我竟弄了 4 个动画
  7. 一场大火,让云计算巨头的数据中心化为灰烬!10 万Rust 游戏玩家的数据永久丢失,无法恢复
  8. 5年5亿美金,华为昇腾如何争夺AI开发者?
  9. 达摩院研发自动驾驶高精定位系统,无GPS信号也可实现厘米级定位
  10. 第一个国产Apache 顶级项目 Kylin,了解一下!| 原力计划