java并发编程(十九)----(JUC集合)总体框架介绍

时间:2023-02-04 20:48:14

本节我们将继续学习JUC包中的集合类,我们知道jdk中本身自带了一套非线程安全的集合类,我们先温习一下java集合包里面的集合类,然后系统的看一下JUC包里面的集合类到底有什么不同。

java集合类

java集合类里面主要包含两大类:一类是Collection接口下的List、Set和Queue接口,一类是Map接口。

List的主要实现类包括:
ArrayList:数组实现的队列,它是一个动态数组;它不是线程安全的,只适用于单线程;
LinkedList:双重链表实现的队列,它也不是线程安全的,只适用于单线程;
Stack:表示后进先出(LIFO)的对象堆栈,继承于Vector,他是线程安全的;
Vector:可以实现可增长的对象数组,与数组一样,它包含可以使用整数索引进行访问的组件。此类是线程安全的。
Set的主要实现类包括:
HashSet:由哈希表(实际上是一个 HashMap 实例)支持。该集合元素不可重复,它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变,并且此实现不是同步的;
TreeSet:基于 TreeMap 的 NavigableSet 实现,也是一个没有重复元素的集合,不过和HashSet不同的是,TreeSet中的元素是有序的;该类的实现也不是同步的;
LinkedHashSet:元素是有序的,维护着一个运行于所有条目的双重链接列表;此实现不是同步的;
Map的主要实现类包括:
HashMap:基于哈希表的 Map 接口的实现。此实现不是同步的;
TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现,该类的<k,v>是有序的此实现不是同步的;
HashTable:与HashMap一样都是基于哈希表的Map实现,但是此类是线程安全的;
WeakHashMap:以弱键 实现的基于哈希表的 Map。在 WeakHashMap 中,当某个键不再正常使用时,将自动移除其条目。该类是非线程安全的。

上面这些是传统的java集合类,他们大多数都不是线程安全的,所以在同步并发中对他们的使用率并不高,为了线程安全以及开发人员在使用集合工具的同时不必去维护线程安全,Doug Lea在JUC(java.util.concurrent)包中添加了java集合包中单线程类的对应的支持高并发的类。下面我们一起来看一下这些并发集合类。

JUC集合类

List的主要实现类包括:

java并发编程(十九)----(JUC集合)总体框架介绍

CopyOnWriteArrayList:相当于线程安全的ArrayList,它实现了List接口,他是线程安全的。

Set的主要实现类包括:

java并发编程(十九)----(JUC集合)总体框架介绍

CopyOnWriteArraySet:相当于线程安全的HashSet,内部使用 CopyOnWriteArrayList 。

ConcurrentSkipListSet:一个基于 ConcurrentSkipListMap 的可缩放并发 NavigableSet 实现,内部排序是有序的。

Map的主要实现类包括:

java并发编程(十九)----(JUC集合)总体框架介绍

ConcurrentHashMap:支持获取的完全并发和更新的所期望可调整并发的哈希表。

ConcurrentSkipListMap:可缩放的并发 ConcurrentNavigableMap 实现,内部排序是有序的Map,该类为线程安全的。

Queue的主要实现类包括:

java并发编程(十九)----(JUC集合)总体框架介绍

ArrayBlockingQueue:一个由数组支持的有界阻塞队列。此队列按 FIFO(先进先出)原则对元素进行排序;

LinkedBlockingQueue:一个基于已链接节点的、范围任意的 blocking queue。此队列按 FIFO(先进先出)排序元素;

LinkedBlockingDeque:一个基于已链接节点的、任选范围的阻塞双端队列;

ConcurrentLinkedQueue:一个基于链接节点的*线程安全队列。此队列按照 FIFO(先进先出)原则对元素进行排序;

ConcurrentLinkedDeque:是双向链表实现的*队列,该队列同时支持FIFO和FILO两种操作方式。

下一节我们将一起详细的来分析JUC中的集合工具的使用和原理。