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

源码 2024-9-5 01:06:51 219 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, 2025-8-2 06:27, Processed in 0.150123 second(s), 35 queries.© 2003-2025 cbk Team.

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