news 2026/7/19 1:16:11

【面经】HashMap和ConcurrentHashMap区别

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【面经】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
  • 这是两者的特点不同,适用的场景不同。

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

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

AM62L SoC CBASS防火墙配置详解:从寄存器解析到实战应用

1. CBASS防火墙:AM62L SoC安全架构的基石在嵌入式系统开发,尤其是涉及多核、多主设备以及安全关键应用的场景里,内存和外设的访问控制从来都不是一个可选项,而是系统稳定与安全的生命线。想象一下,在一个复杂的工业控制…

作者头像 李华
网站建设 2026/7/19 1:12:14

消息队列;Spring Boot 3.3 + AI Agent × RabbitMQ:让AI自动处理死信和消息路由,运维告警从每天50条降到3条

文章目录 写在前面 这是Spring AI Agent系列的第四篇。前面搭了CRUD框架、MCP协议接入、Redis智能缓存。今天解决另一个高频痛点:消息队列的运维噩梦。 用过RabbitMQ的都知道,最烦的不是搭建,是日常运维。消息积压了谁处理?死信队…

作者头像 李华
网站建设 2026/7/19 1:11:51

Node.js 26.3.0与工具链性能优化全解析

1. Node.js技术周刊2026年第16周概览作为长期跟踪Node.js生态的技术从业者,每周我都会梳理社区动态。2026年第16周的技术演进呈现出明显的工具链整合趋势和性能优化导向。从运行时核心到周边生态,以下几个方向值得开发者重点关注:Node.js 26.…

作者头像 李华
网站建设 2026/7/19 1:10:54

React Native与原生Android混合开发实践指南

1. React Native 与原生 Android 项目融合的核心思路在移动应用开发领域,混合开发已经成为提升开发效率的重要手段。React Native 作为跨平台开发的代表框架,与原生 Android 项目的融合能够充分发挥两者的优势:既保留了原生应用的高性能特性&…

作者头像 李华
网站建设 2026/7/19 1:10:24

丝绒哑光口红代工,怎么避开“一热就化、一涂就干”的坑?

做实体店或私域团长的老板,拿着某法系头部正红720的图片来找我代工,最常问的就是:“能不能做出那种丝绒哑光,上嘴不拔干、夏天不放包里就软化的效果?”但说实话,很多刚入行的同行,被低价代工厂一…

作者头像 李华
网站建设 2026/7/19 1:09:59

金融时间序列分析与因子选股:量化交易入门完整路径

记得第一次接触量化交易时,我被那些复杂的金融术语和代码吓得不轻。直到后来才发现,真正阻碍大多数人上手的,不是数学公式有多难,而是没人告诉你该从哪里开始、怎么把零散的知识点串联成可执行的交易策略。今天这篇文章&#xff0…

作者头像 李华