一、概述
提供了高并发、线程安全的能力
二、ConcurrentHashMap - 并发哈希映射
异步式线程安全的映射, 是一个类
1. 异步式线程安全的映射, 是一个类
2. 底层是依靠数组+链表结构来存储,数组的初始容量是16,加载因子是0.75
3. 采取了分段(桶)锁机制:当不同线程访问不同的桶的时候,这个线程会锁住当前的桶而不是整个映射。在后续版本中,为了提高并发性,在分段锁的基础上,引入了读写锁机制:
a. 读锁:允许多个线程读,不允许写
b. 写锁:只允许一个线程写,不允许读
4. 在JDK1.8中,引入了CAS(Compare And Swap , 比较和交换)无锁算法
5.从JDK1.8开始,在ConcurrentHashMap/HashMap中引入了红黑树机制。如果当桶中的元素超过8个时候,会将这个链表扭转成一棵红黑树;如果红黑树中的节点个数不足7个,则会将红黑树扭转回链表 - 当桶的数量>=64的时候,才会启动红黑树机制
三、ConcurrentNavigableMap - 并发导航映射
1. 它的使用和其他映射几乎没有差别,但是提供了用于截取子映射的方法
2. ConcurrentNavigableMap是一个接口,所以更常使用实现类ConcurrentSkipListMap
3. ConcurrentSkipListMap - 并发跳跃表映射:
a. 底层是基于跳跃表来实现的
b. 跳跃表要求元素必须是有序的
c. 最上层的跳跃表中至少有2-3个元素
d. 跳跃表适合于查询多的场景
e. 跳跃表本身是一个典型的以空间换时间的产物
f. 如果新添元素,这个元素是否提取到上一层的跳跃表中,遵循"抛硬币"原则
跳跃表的查询时间复杂度是O(logn)