乐趣区

2019年Java面试-并发容器篇

我将 JUC 包中的集合类划分为 3 部分来进行说明。在简单的了解 JUC 包中集合类的框架之后,后面的章节再逐步对各个类进行介绍。
List 和 Set
Map
Queue

全网唯一一个从 0 开始帮助 Java 开发者转做大数据领域的公众号~
公众号大数据技术与架构或者搜索 import_bigdata 关注,大数据学习路线最新更新,已经有很多小伙伴加入了~

List 和 Set
JUC(java.util.concurrent)集合包中的 List 和 Set 实现类包括:

CopyOnWriteArrayList
CopyOnWriteArraySet
ConcurrentSkipListSet
ConcurrentSkipListSet 稍后在说明 Map 时再说明,
CopyOnWriteArrayList 和 CopyOnWriteArraySet 的框架如下图所示:

CopyOnWriteArrayList 相当于线程安全的 ArrayList, 它实现了 List 接口。CopyOnWriteArrayList 是支持高并发的。
CopyOnWriteArraySet 相当于线程安全的 HashSet, 它继承于 AbstractSet 类。
CopyOnWriteArraySet 内部包含一个 CopyOnWriteArrayList 对象,它是通过 CopyOnWriteArrayList 实现的。
Map
JUC 集合包中 Map 的实现类包括: ConcurrentHashMap 和 ConcurrentSkipListMap。它们的框架如下图所示:

ConcurrentHashMap 是线程安全的哈希表(相当于线程安全的 HashMap);它继承于 AbstractMap 类,并且实现 ConcurrentMap 接口。ConcurrentHashMap 是通过“锁分段”来实现的,它支持并发。
ConcurrentSkipListMap 是线程安全的有序的哈希表(相当于线程安全的 TreeMap); 它继承于 AbstractMap 类,并且实现 ConcurrentNavigableMap 接口。ConcurrentSkipListMap 是通过“跳表”来实现的,它支持并发。
ConcurrentSkipListSet 是线程安全的有序的集合(相当于线程安全的 TreeSet);它继承于 AbstractSet,并实现了 NavigableSet 接口。ConcurrentSkipListSet 是通过 ConcurrentSkipListMap 实现的,它也支持并发。

Queue
JUC 集合包中 Queue 的实现类包括: ArrayBlockingQueue, LinkedBlockingQueue, LinkedBlockingDeque, ConcurrentLinkedQueue 和 ConcurrentLinkedDeque。它们的框架如下图所示:

ArrayBlockingQueue 是数组实现的线程安全的有界的阻塞队列。
LinkedBlockingQueue 是单向链表实现的 (指定大小) 阻塞队列,该队列按 FIFO(先进先出)排序元素。
LinkedBlockingDeque 是双向链表实现的 (指定大小) 双向并发阻塞队列,该阻塞队列同时支持 FIFO 和 FILO 两种操作方式。
ConcurrentLinkedQueue 是单向链表实现的无界队列,该队列按 FIFO(先进先出)排序元素。
ConcurrentLinkedDeque 是双向链表实现的无界队列,该队列同时支持 FIFO 和 FILO 两种操作方式。

退出移动版