溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java concurrency之集合_動力節點Java學院整理

發布時間:2020-08-26 06:21:28 來源:腳本之家 閱讀:187 作者:skywang12345 欄目:編程語言

Java集合包

Java集合主體內容包括Collection集合和Map類;而Collection集合又可以劃分為List(隊列)和Set(集合)。

1. List的實現類主要有: LinkedList, ArrayList, Vector, Stack。

(01) LinkedList是雙向鏈表實現的雙端隊列;它不是線程安全的,只適用于單線程。

(02) ArrayList是數組實現的隊列,它是一個動態數組;它也不是線程安全的,只適用于單線程。

(03) Vector是數組實現的矢量隊列,它也一個動態數組;不過和ArrayList不同的是,Vector是線程安全的,它支持并發。

(04) Stack是Vector實現的棧;和Vector一樣,它也是線程安全的。 

2. Set的實現類主要有: HastSet和TreeSet。

(01) HashSet是一個沒有重復元素的集合,它通過HashMap實現的;HashSet不是線程安全的,只適用于單線程。

(02) TreeSet也是一個沒有重復元素的集合,不過和HashSet不同的是,TreeSet中的元素是有序的;它是通過TreeMap實現的;TreeSet也不是線程安全的,只適用于單線程。 

3.Map的實現類主要有: HashMap,WeakHashMap, Hashtable和TreeMap。
(01) HashMap是存儲“鍵-值對”的哈希表;它不是線程安全的,只適用于單線程。

(02) WeakHashMap是也是哈希表;和HashMap不同的是,HashMap的“鍵”是強引用類型,而WeakHashMap的“鍵”是弱引用類型,也就是說當WeakHashMap 中的某個鍵不再正常使用時,會被從WeakHashMap中被自動移除。WeakHashMap也不是線程安全的,只適用于單線程。

(03) Hashtable也是哈希表;和HashMap不同的是,Hashtable是線程安全的,支持并發。

(04) TreeMap也是哈希表,不過TreeMap中的“鍵-值對”是有序的,它是通過R-B Tree(紅黑樹)實現的;TreeMap不是線程安全的,只適用于單線程。

更多關于這些集合類的介紹,可以參考“Java 集合系列目錄(Category)”。

為了方便,我們將前面介紹集合類統稱為”java集合包“。java集合包大多是“非線程安全的”,雖然可以通過Collections工具類中的方法獲取java集合包對應的同步類,但是這些同步類的并發效率并不是很高。為了更好的支持高并發任務,并發大師Doug Lea在JUC(java.util.concurrent)包中添加了java集合包中單線程類的對應的支持高并發的類。例如,ArrayList對應的高并發類是CopyOnWriteArrayList,HashMap對應的高并發類是ConcurrentHashMap,等等。

JUC包在添加”java集合包“對應的高并發類時,為了保持API接口的一致性,使用了”Java集合包“中的框架。例如,CopyOnWriteArrayList實現了“Java集合包”中的List接口,HashMap繼承了“java集合包”中的AbstractMap類,等等。得益于“JUC包使用了Java集合包中的類”,如果我們了解了Java集合包中的類的思想之后,理解JUC包中的類也相對容易;理解時,最大的難點是,對JUC包是如何添加對“高并發”的支持的!

JUC中的集合類

下面,我們先了解JUC包中集合類的框架;為了方便講訴,我將JUC包中的集合類劃分為3部分來進行說明。在簡單的了解JUC包中集合類的框架之后,后面的章節再逐步對各個類進行介紹。

1. List和Set

JUC集合包中的List和Set實現類包括: CopyOnWriteArrayList, CopyOnWriteArraySet和ConcurrentSkipListSet。

ConcurrentSkipListSet稍后在說明Map時再說明,CopyOnWriteArrayList 和 CopyOnWriteArraySet的框架如下圖所示:

Java concurrency之集合_動力節點Java學院整理

(01) CopyOnWriteArrayList相當于線程安全的ArrayList,它實現了List接口。CopyOnWriteArrayList是支持高并發的。

(02) CopyOnWriteArraySet相當于線程安全的HashSet,它繼承于AbstractSet類。CopyOnWriteArraySet內部包含一個CopyOnWriteArrayList對象,它是通過CopyOnWriteArrayList實現的。

2. Map

JUC集合包中Map的實現類包括: ConcurrentHashMap和ConcurrentSkipListMap。它們的框架如下圖所示:

Java concurrency之集合_動力節點Java學院整理

(01) ConcurrentHashMap是線程安全的哈希表(相當于線程安全的HashMap);它繼承于AbstractMap類,并且實現ConcurrentMap接口。ConcurrentHashMap是通過“鎖分段”來實現的,它支持并發。

(02) ConcurrentSkipListMap是線程安全的有序的哈希表(相當于線程安全的TreeMap); 它繼承于AbstractMap類,并且實現ConcurrentNavigableMap接口。ConcurrentSkipListMap是通過“跳表”來實現的,它支持并發。

(03) ConcurrentSkipListSet是線程安全的有序的集合(相當于線程安全的TreeSet);它繼承于AbstractSet,并實現了NavigableSet接口。ConcurrentSkipListSet是通過ConcurrentSkipListMap實現的,它也支持并發。

3. Queue

JUC集合包中Queue的實現類包括: ArrayBlockingQueue, LinkedBlockingQueue, LinkedBlockingDeque, ConcurrentLinkedQueue和ConcurrentLinkedDeque。它們的框架如下圖所示:

Java concurrency之集合_動力節點Java學院整理

(01) ArrayBlockingQueue是數組實現的線程安全的有界的阻塞隊列。

(02) LinkedBlockingQueue是單向鏈表實現的(指定大小)阻塞隊列,該隊列按 FIFO(先進先出)排序元素。

(03) LinkedBlockingDeque是雙向鏈表實現的(指定大小)雙向并發阻塞隊列,該阻塞隊列同時支持FIFO和FILO兩種操作方式。

(04) ConcurrentLinkedQueue是單向鏈表實現的無界隊列,該隊列按 FIFO(先進先出)排序元素。

(05) ConcurrentLinkedDeque是雙向鏈表實現的無界隊列,該隊列同時支持FIFO和FILO兩種操作方式。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女