1. 程式人生 > >java併發程式設計(十九)----(JUC集合)總體框架介紹

java併發程式設計(十九)----(JUC集合)總體框架介紹

本節我們將繼續學習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的主要實現類包括:

CopyOnWriteArrayList:相當於執行緒安全的ArrayList,它實現了List介面,他是執行緒安全的。

Set的主要實現類包括:

CopyOnWriteArraySet:相當於執行緒安全的HashSet,內部使用 CopyOnWriteArrayList 。

ConcurrentSkipListSet:一個基於 ConcurrentSkipListMap 的可縮放併發 NavigableSet 實現,內部排序是有序的。

Map的主要實現類包括:

ConcurrentHashMap:支援獲取的完全併發和更新的所期望可調整併發的雜湊表。

ConcurrentSkipListMap:可縮放的併發 ConcurrentNavigableMap 實現,內部排序是有序的Map,該類為執行緒安全的。

Queue的主要實現類包括:

ArrayBlockingQueue:一個由陣列支援的有界阻塞佇列。此佇列按 FIFO(先進先出)原則對元素進行排序;

LinkedBlockingQueue:一個基於已連結節點的、範圍任意的 blocking queue。此佇列按 FIFO(先進先出)排序元素;

LinkedBlockingDeque:一個基於已連結節點的、任選範圍的阻塞雙端佇列;

ConcurrentLinkedQueue:一個基於連結節點的無界執行緒安全佇列。此佇列按照 FIFO(先進先出)原則對元素進行排序;

ConcurrentLinkedDeque:是雙向連結串列實現的無界佇列,該佇列同時支援FIFO和FILO兩種操作方式。

下一節我們將一起詳細的來分析JUC中的集合工具的使用和原理。