当前位置: 首页 > news >正文

【面经】HashMap和ConcurrentHashMap区别

HashMap和ConcurrentHashMap区别

HashMapConcurrentHashMap的最大区别在于线程安全性。

  • HashMap是非线程安全的。这意味着在多线程环境下,如果多个线程同时修改HashMap,可能会导致数据不一致,甚至引发死循环等问题。

  • ConcurrentHashMap是线程安全的,它通过细粒度的锁机制来保证并发安全。在多线程环境下,不同的线程可以同时对不同的部分进行修改而不会影响到其他线程。

ConcurrentHashMap的线程安全是通过分段锁(Segment Locks)来实现的。具体来说,ConcurrentHashMap会将Map分为多个段,每个段有自己的锁,这样线程可以在不同的段上进行并发操作,不会发生阻塞。相比之下,HashMap不进行任何的锁机制,因此不支持并发修改。

JDK1.7 版本底层是 数组+链表 实现,使用分段锁来保证线程安全,它默认是将数组分成了16段,同时给每一段来配一把锁,因此最多只有16个线程去同时操作集合不同段。这样降低了并发操作时的锁竞争,提高并发性能。

JDK1.8 版本底层是数组+链表+红黑树,在并发处理方面去掉了分段锁的设计,而是使用 CAS + synchronized 来实现一种更加细粒度的锁。

从源码上看:添加元素时首先会判断数组是否为空,如果数组为空则使用CAS 来初始化数组。如果数组不为空则判断元素要存入的桶位置上是否为空,如果桶位置上为空则使用CAS 设置桶上的头节点;如果桶位置上不为空则使用synchronize 加锁,锁住桶位置上的头节点,遍历桶中的数据,替换或新增节点到桶中,并且再判断链表是否需要转为红黑树

锁粒度细化:锁的粒度从段缩小到单个桶(链表/树的头节点),减少竞争概率。

JDK 1.8 的 ConcurrentHashMap 设计体现了无锁化编程锁粒度细化的优化思想,是 Java 并发容器的经典实现。

为什么不全部用CAS或者全部用synchronized加锁实现线程安全,为什么不同操作用不同的方式去保证线程安全

我们可以看不同的方式中做的事情是什么:

  • CAS保证线程安全时,它做的事情是初始化数组或者初始化头节点
  • synchronized保证线程安全时,它做的事情是遍历桶下的结点,比较key是否相等,然后再插入元素或者替换元素,再判断链表是否转为红黑树

所以可以看出是后者耗时更长

  • CAS无锁就适合做短时间的任务,因为如果任务执行时间长,就会有线程不断的自旋尝试,过度占用CPU
  • synchronized就适合做长时间、高竞争的任务,加锁后,其余线程会进入休眠,不会占用CPU
  • 这是两者的特点不同,适用的场景不同。

这种设计体现了对不同场景的精细化控制,是现代并发编程中“无锁优先,锁为补充”思想的典型实践。

http://www.cnnetsun.cn/news/3500016.html

相关文章:

  • AM62L SoC CBASS防火墙配置详解:从寄存器解析到实战应用
  • 消息队列;Spring Boot 3.3 + AI Agent × RabbitMQ:让AI自动处理死信和消息路由,运维告警从每天50条降到3条
  • Node.js 26.3.0与工具链性能优化全解析
  • React Native与原生Android混合开发实践指南
  • 丝绒哑光口红代工,怎么避开“一热就化、一涂就干”的坑?
  • 金融时间序列分析与因子选股:量化交易入门完整路径
  • Android线程模型与UI更新机制详解
  • C#实现邮箱验证激活功能全流程指南
  • SpringBoot 优雅关闭与降级——生产环境必备
  • 如何设计高效的章节回顾:结构化梳理与交互式学习
  • 鸿蒙 ArkTS 实战:Menu Nutrition Advice 从智能助手到保存闭环完整解析
  • 基于遗传算法的梯级水电站群联合火电厂优化调度研究(Python代码实现)
  • TI毫米波雷达SoC中EDMA3架构解析与数据搬运实战
  • TI AWR雷达芯片CBUFF模块Linklist配置与高速数据接口实战
  • EDMA寄存器配置实战:从架构理解到性能优化与错误处理
  • Go语言实现高性能LDAP认证服务的架构与实践
  • 大模型推理的批处理优化——Continuous Batching 与 Dynamic Batching 对比
  • 长期使用后,定制贴标机服务商的真实表现
  • 【JVM调优实战】10-分代收集理论
  • 从Excel升级到UHF RFID,切换后的真实感受实测
  • 【JVM调优实战】17-Arthas线上诊断神器
  • 2026年泡菜废水治理企业推荐,这几家技术方案真靠谱
  • 从零封装MCP Server:让WorkBuddy 听懂你的工具
  • 行业选型新标尺:源码交付、禁止转包、MCP‑A2A原生适配成核心,西安服务商实力排行出炉
  • 终极Xbox 360模拟器教程:在PC上重温经典游戏
  • 《系统分析师教程(第2版)》笔记——第 18 章 移动应用系统分析与设计
  • 用 Skill 精读 OCRBench v2 是什么体验?
  • 大家好,我是UWA GPM「小Q」,今天是我加入项目的第一天
  • 告别 Agent 大循环:后端工程师从脚本原型到可维护架构的进阶指南
  • 西门子S7-1200PLC通过CB1241插件板RS485通讯控制变频器