jdk1.8的hashmap扩容时会发生数据丢失吗,大家来看看我的说法对不对

发布时间:2026/10/24 4:17:20

jdk1.8的hashmap扩容时会发生数据丢失吗,大家来看看我的说法对不对 JDK1.8 HashMap 并发扩容数据丢失问题分析一、核心结论JDK 1.8 的 HashMap 仅通过尾插法解决了 JDK1.7 并发扩容时环形链表死循环问题但没有解决并发扩容导致的数据丢失问题HashMap 依旧线程不安全多线程同时触发扩容依然会出现元素丢失、数据覆盖现象。二、场景前置条件HashMap 原始数组 table 容量 2数组下标 1 位置链表3 - 7 - 5存在两个并发线程线程 A、线程 B同时执行扩容resize()方法JDK1.8 扩容逻辑按节点 hash 高位区分原链表拆分为两条子链表低位链表留在原下标高位链表迁移至原下标 原容量位置采用尾插法迁移节点三、线程调度时序复现数据丢失过程步骤 1两线程同时进入扩容逻辑线程 A 中途阻塞线程 A、B 同步读取旧数组开始遍历下标 1 的链表迁移节点线程 A 遍历到节点e3预存下一个节点引用next7此时 CPU 切换线程 A 被阻塞挂起。步骤 2线程 B 完整执行扩容完成数组替换线程 B 不受阻塞完整遍历整条链表3-7-5按 hash 拆分迁移元素 5hash 高位为 0留在新数组下标 1元素 3、7hash 高位为 1迁移至新数组下标 3形成链表3-7-null线程 B 完成全部节点迁移将扩容后的新数组赋值给 HashMap 全局变量table旧数组引用失效。此时内存中最新 table 状态table[1] 5table[3] 3 - 7 - null步骤 3线程 A 恢复时间片基于旧引用继续遍历丢数据线程 A 被唤醒后持有的仍是扩容前旧链表的引用继续执行循环先处理节点e3完成迁移读取预存的next7赋值给e继续处理节点 7读取节点 7 的后继指针7.next nullnext赋值为 null循环判定next null直接终止链表遍历。步骤 4最终结果 —— 元素 5 永久丢失线程 A 只遍历了3、7两个节点完全没有读取到节点 5不会对 5 做任何迁移操作线程 A 迁移完成后覆盖数组最终新数组中不存在元素 5数据丢失。
延伸阅读

更多相关文章

2026/10/24 3:23:18

大模型项目数据治理:核心挑战与落地实践指南

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 大模型项目在企业落地过程中,数据治理往往成为最关键的瓶颈。很多团队在模型选型、算法优化上投入大量精力,却…

2026/10/24 4:13:07

Mac 窗口切换工具推荐:DockGo 让「按住预览、松开直达」成为日常

一天切窗上百次的人,值得一个更顺手的入口。这篇工具推荐围绕 Mac 上的窗口切换场景,介绍 DockGo 这款窗口切换器的核心用法、按键映射、实现细节与上手步骤,并说明它适合谁、不适合谁,方便你判断是否值得装进自己的效率工具箱。 …

2026/10/24 4:08:07

Go语言学习day1

1变量的声明1.1go的变量声明是放在变量名后面var 是 Go 里声明变量的关键字,var 就是“我要声明一个变量”的标记。1.完整声明 var port int var host string var timeout time.Duration //time包里的类型,单位为ns2.有初始值,可…

2026/10/23 22:56:35

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/24 0:02:40

MATLAB缩进快捷键与批量格式化实战指南

1. 被自动缩进折磨的那些年如果你写过MATLAB代码,大概率经历过这种场景:从某个文档、网页或者聊天记录里复制了一段代码,粘贴进编辑器之后,每一行前面都带着莫名其妙的空格,有的行首是四个空格,有的是一个T…

2026/10/24 0:02:40

用Poco实现Qt风格信号与槽的跨平台C++方案

简介:本资源是一份面向C中级开发者的技术实践工程,聚焦于在非Qt框架环境下模拟实现Qt核心通信机制——信号与槽,借助Poco网络库的事件系统完成解耦式对象通信。适用于需在跨平台C项目中引入松耦合回调机制、但受限于无法集成Qt依赖的开发场景…

2026/10/24 0:02:40

ESXi裸机虚拟化安装指南:从硬件兼容到虚拟机部署

1. 为什么还要折腾ESXi:从一台闲置机器说起手里攒了几台淘汰下来的迷你主机,配置不算差,i5加16G内存,扔了可惜,装个桌面系统又觉得浪费。这种场景下,ESXi就成了一个绕不开的选择。它是一套裸机虚拟化平台&a…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑