翻了ConcurrentHashMap1.7 和1.8的源码,我总结了它们的紧张区别。

源码 2024-9-5 01:06:51 71 0 来自 中国
ConcurrentHashMap

思索:HashTable是线程安全的,为什么不保举利用?
HashTable是一个线程安全的类,它利用synchronized来锁住整张Hash表来实现线程安全,即每次锁住整张表让线程独占,相称于全部线程举行读写时都去竞争一把锁,导致服从非常低下。
1 ConcurrentHashMap 1.7

在JDK1.7中ConcurrentHashMap接纳了数组+分段锁的方式实现
Segment(分段锁)-淘汰锁的粒度
ConcurrentHashMap中的分段锁称为Segment,它即雷同于HashMap的结构,即内部拥有一个Entry数组,数组中的每个元素又是一个链表,同时又是一个ReentrantLock(Segment继承了ReentrantLock)。
1.存储结构

Java 7 版本 ConcurrentHashMap 的存储结构如图:


2.png
ConcurrnetHashMap 由很多个 Segment 组合,而每一个 Segment 是一个雷同于 HashMap 的结构,以是每一个 HashMap 的内部可以举行扩容。但是 Segment 的个数一旦初始化就不能改变,默认 Segment 的个数是 16 个,以是可以以为 ConcurrentHashMap 默认支持最多 16 个线程并发。
2. 初始化

通过 ConcurrentHashMap 的无参构造探寻 ConcurrentHashMap 的初始化流程。
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-10-19 06:26, Processed in 0.176024 second(s), 35 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表