ConcurrentHashMap
ConcurrentHashMap1.8之前提供了⼀种粒度更细的加锁机制来实现在多线程下更⾼的性
能,这种机制叫分段锁(Lock Striping)。
提供的优点是:在并发环境下将实现更⾼的吞吐量,⽽在单线程环境下只损失⾮常
⼩的性能。
可以这样理解分段锁,就是将数据分段,对每⼀段数据分配⼀把锁。当⼀个线程占
⽤锁访问其中⼀个段数据的时候,其他段的数据也能被其他线程访问。
有些⽅法需要跨段,⽐如size()、isEmpty()、containsValue(),它们可能需要锁定
整个表⽽⽽不仅仅是某个段,这需要按顺序锁定所有段,操作完毕后,⼜按顺序释
放所有段的锁。
ConcurrentHashMap是由Segment数组结构和HashEntry数组结构组成。Segment
是⼀种可重⼊锁ReentrantLock,HashEntry则⽤于存储键值对数据。
⼀个ConcurrentHashMap⾥包含⼀个Segment数组,Segment的结构和HashMap
类似,是⼀种数组和链表结构, ⼀个Segment⾥包含⼀个HashEntry数组,每个
HashEntry是⼀个链表结构(同HashMap⼀样,它也会在⻓度达到8的时候转化为
红⿊树)的元素, 每个Segment守护者⼀个HashEntry数组⾥的元素,当对
HashEntry数组的数据进⾏修改时,必须⾸先获得它对应的Segment锁。
本文来自博客园,作者:云哲,转载请注明原文链接:https://www.cnblogs.com/yyz0225/p/18006128
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)