news 2026/7/10 2:33:12

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
jdk1.8的hashmap扩容时会发生数据丢失吗,大家来看看我的说法对不对

JDK1.8 HashMap 并发扩容数据丢失问题分析

一、核心结论

JDK 1.8 的 HashMap 仅通过尾插法解决了 JDK1.7 并发扩容时环形链表死循环问题,但没有解决并发扩容导致的数据丢失问题,HashMap 依旧线程不安全,多线程同时触发扩容依然会出现元素丢失、数据覆盖现象。

二、场景前置条件

  1. HashMap 原始数组 table 容量 = 2

  2. 数组下标 1 位置链表:3 -> 7 -> 5

  3. 存在两个并发线程:线程 A、线程 B,同时执行扩容resize()方法

  4. JDK1.8 扩容逻辑:按节点 hash 高位区分,原链表拆分为两条子链表,低位链表留在原下标,高位链表迁移至原下标 + 原容量位置,采用尾插法迁移节点

三、线程调度时序复现数据丢失过程

步骤 1:两线程同时进入扩容逻辑,线程 A 中途阻塞

线程 A、B 同步读取旧数组,开始遍历下标 1 的链表迁移节点;

线程 A 遍历到节点e=3,预存下一个节点引用next=7,此时 CPU 切换,线程 A 被阻塞挂起。

步骤 2:线程 B 完整执行扩容,完成数组替换

线程 B 不受阻塞,完整遍历整条链表3->7->5,按 hash 拆分迁移:

  • 元素 5:hash 高位为 0,留在新数组下标 1;

  • 元素 3、7:hash 高位为 1,迁移至新数组下标 3,形成链表3->7->null

    线程 B 完成全部节点迁移,将扩容后的新数组赋值给 HashMap 全局变量

    table

    ,旧数组引用失效。

此时内存中最新 table 状态:

  • table[1] = 5

  • table[3] = 3 -> 7 -> null

步骤 3:线程 A 恢复时间片,基于旧引用继续遍历丢数据

线程 A 被唤醒后,持有的仍是扩容前旧链表的引用,继续执行循环:

  1. 先处理节点e=3,完成迁移;

  2. 读取预存的next=7,赋值给e,继续处理节点 7;

  3. 读取节点 7 的后继指针7.next = nullnext赋值为 null;

  4. 循环判定next == null,直接终止链表遍历。

步骤 4:最终结果 —— 元素 5 永久丢失

线程 A 只遍历了3、7两个节点,完全没有读取到节点 5,不会对 5 做任何迁移操作;

线程 A 迁移完成后覆盖数组,最终新数组中不存在元素 5,数据丢失

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/10 2:31:59

AR8327 交换机芯片 7端口配置:从 VLAN 划分到端口交换的 3 种实战应用

AR8327 交换机芯片 7端口配置:从 VLAN 划分到端口交换的 3 种实战应用在嵌入式网络设备开发中,交换芯片的灵活配置能力往往决定了整个系统的性能上限。AR8327作为一款集成7端口的高性价比交换芯片,凭借其独特的双CPU端口设计和硬件级交换逻辑…

作者头像 李华
网站建设 2026/7/10 2:30:22

OpenClaw:轻量级本地智能体框架,支持跨平台AI工具编排

1. OpenClaw 是什么?它不是另一个“Claude 模仿者”,而是一套可落地的本地化智能体协作框架 OpenClaw 这个名字最近在开发者圈子里冒得很快,尤其在 Mac 和 Windows 用户搜索“claude code 本地部署”“codex mac intel”“dify 本地部署教程…

作者头像 李华
网站建设 2026/7/10 2:30:18

白盒测试实战:3个经典C程序(闰年/三角形/中间值)的4种覆盖方法对比

白盒测试实战:3个经典C程序的4种覆盖方法深度对比1. 白盒测试核心方法论解析白盒测试作为代码级测试的核心手段,其价值在于通过可视化的代码逻辑分析,系统性地验证程序内部结构的正确性。与黑盒测试不同,白盒测试要求测试者像X光透…

作者头像 李华
网站建设 2026/7/10 2:28:34

大数据计算机毕设之基于 Django 的热门 IT 技能需求分析与岗位推送系统的设计与实现 基于 Django 的城市 IT 岗位分布研判系统(完整前后端代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/7/10 2:27:55

浏阳本地口碑好的汽车养护连锁店推荐:全品类服务体验

浏阳本地汽车养护连锁店推荐:全品类服务体验与选择指南在浏阳,寻找一家专业且值得信赖的汽车养护店,不仅是车主日常用车的刚需,更是保障行车安全的重要环节。面对市场上众多的养护品牌,单纯依赖“排名第一”或“最好”…

作者头像 李华