什么是 ConcurrentHashMap?
ConcurrentHashMap 是 Java 中的一个线程安全且高效的 HashMap 实现。平时涉及高并发如果要用 map 结构,那第一时间想到的就是它。
相对于 hashmap 来说, ConcurrentHashMap 就是线程安全的 map,其中利用了锁分段的思想提高了并发度。
那么它到底是如何实现线程安全的?
JDK 1.6 版本关键要素: • segment 继承了 ReentrantLock 充当锁的角色,为每一个 segment 提供了线程安全的保障; • segment 维护了哈希散列表的若干个桶,每个桶由 HashEntry 构成的链表。 JDK1.8 后,ConcurrentHashMap 抛弃了原有的 Segment 分段锁,而采用了 CAS + synchronized 来保证并发安全性
ConcurrentHashMap 的并发度是什么?
ConcurrentHashMap 把实际 map 划分成若干部分来实现它的可扩展性和线程安全。这种划分是使用并发度获得的,它是 ConcurrentHashMap 类构造函数的一个可选参数,默认值为 16,这样在多线程情况下就能避免争用。
在 JDK8 后,它摒弃了 Segment(锁段)的概念,而是启用了一种全新的方式实现,利用 CAS 算法。同时加入了更多的辅助变量来提高并发度,具体内容还是查看源码吧。