📚 分类
多线程
🕵🏽‍♀️ 问题描述
聊一下ConcurrentHashMap
👨‍🏫 问题讲解
ConcurrentHashMap是一种线程安全的高效Map集合.

❒ 底层数据结构

▣ JDK1.7 底层采用分段的数组+链表实现 (一旦创建不能扩容,同时操作一个segment效率低下)
▣ JDK1.8 采用的数据结构跟HashMap1.8的结构一样,数组+链表/红黑二叉树

✔ 在JDK1.8 中,放弃了Segment设计,数据结构跟HashMap的数据结构是一样的: 数组 + 红黑树 + 链表
✔ 采用 CAS + Synchronized来保证并发安全进行实现
✔ CAS 控制数组节点的添加
✔ synchronized只锁定当前链表或红黑二叉树的首节点,只要hash不冲突,就不会产生并发的问题,效率得到提升
🏳️‍🌈 问题总结
❒ 底层数据结构

✔ JDK1.7 底层采用分段的数组+链表实现。
✔ JDK1.8 采用的数据结构跟HashMap1.8的结构一样,数组+链表/红黑二叉树。

❒ 加锁的方式

✔ JDK 1.7 采用Segment分段锁,底层使用的是ReentrantLock。
✔ JDK 1.8 采用CAS添加新节点,采用synchronized锁定链表或红黑二叉树的首节点,相对Segment分段锁粒度更细,性能更好。
📖 问题信息
📈 浏览次数:18 | 📅 更新时间:2025-12-01 22:02:31
📦 创建信息
🏷️ ID:112 | 📅 创建时间:2025-01-06 09:14:52