您的位置:首页 > 游戏 > 手游 > 重庆五洲妇儿医院_免费开发软件app下载_广东疫情动态人民日报_百度平台联系方式

重庆五洲妇儿医院_免费开发软件app下载_广东疫情动态人民日报_百度平台联系方式

2025/2/12 15:21:24 来源:https://blog.csdn.net/qq_42713936/article/details/145525218  浏览:    关键词:重庆五洲妇儿医院_免费开发软件app下载_广东疫情动态人民日报_百度平台联系方式
重庆五洲妇儿医院_免费开发软件app下载_广东疫情动态人民日报_百度平台联系方式

20250208

  • 多线程下jdk1.7的头插法导致的死循环问题

多线程下jdk1.7的头插法导致的死循环问题

【新版Java面试专题视频教程,java八股文面试全套真题+深度详解(含大厂高频面试真题)】
在这里插入图片描述
jdk1.7在hashmap扩容时使用的是头插法,所以扩容后元素的顺序是相反的

在多线程情况下:
在这里插入图片描述
现在开始扩容,在扩容初始状态时,2个线程的e都指向了A,next都指向了B

之后线程2抢到了时间片,线程2开始对hashmap进行扩容:
在这里插入图片描述
线程2扩容完之后,因为数据迁移过程中只是改变了对象的引用,所以线程1的e依旧指向A,next依旧指向B
现在线程1开始扩容工作:

  • 在第1次循环时,线程1会把e指向的A插入到线程1扩容后的数组上,之后因为要执行e=next,此时的next=B,所以第一次循环后e指向了B,next指向了A
    在这里插入图片描述

  • 在第2次循环时,线程1会把e指向的B插入到扩容后的数组上,之后继续执行e=next,此时的next=A,所以第二次循环后e指向了A,next指向了null

  • 第3次循环时,线程1会把e指向的A再次插入到扩容后的数组上,之后继续执行e=next,此时的next=null,所以第二次循环后e指向了null
    在这里插入图片描述

  • 扩容结束,出现了多线程死循环
    在这里插入图片描述

总结:
在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com