JUC源碼分析-容器-簡介

list和set

CopyOnWriteArrayList:相當於線程安全的ArrayList,通過顯式鎖 ReentrantLock 實現線程安全。允許存儲null值。

CopyOnWriteArraySet:相當於線程安全的HashSet,內部使用 CopyOnWriteArrayList 實現。允許存儲null值。

Map

ConcurrentHashMap:線程安全的HashMap(但不允許空key或value),ConcurrentHashMap在JDK1.7之前是通過Lock和segment(分段鎖)實現,1.8之後改爲CAS+synchronized來保證併發安全。

ConcurrentSkipListMap:跳錶結構的併發有序哈希表。不允許存儲null值。

ConcurrentSkipListSet:跳錶結構的併發有序集合。內部使用 ConcurrentSkipListMap 實現。不允許存儲null值。

 

 

queue

ArrayBlockingQueue:數組實現的線程安全的有界的阻塞隊列,使用Lock機制實現併發訪問,隊列元素使用 FIFO(先進先出)方式。

LinkedBlockingQueue:單向鏈表實現的(指定大小)阻塞隊列,使用Lock機制實現併發訪問,隊列元素使用 FIFO(先進先出)方式。

LinkedBlockingDeque:雙向鏈表實現的(指定大小)雙向併發阻塞隊列,使用Lock機制實現併發訪問,該阻塞隊列同時支持FIFO和FILO兩種操作方式。

ConcurrentLinkedQueue:單向鏈表實現的無界併發隊列,通過CAS實現併發訪問,隊列元素使用 FIFO(先進先出)方式。

ConcurrentLinkedDeque:雙向鏈表實現的無界併發隊列,通過CAS實現併發訪問,該隊列同時支持FIFO和FILO兩種操作方式。

DelayQueue:延時無界阻塞隊列,使用Lock機制實現併發訪問。隊列裏只允許放可以“延期”的元素,隊列中的head是最先“到期”的元素。如果隊裏中沒有元素到“到期”,那麼就算隊列中有元素也不能獲取到。

PriorityBlockingQueue:無界優先級阻塞隊列,使用Lock機制實現併發訪問。priorityQueue的線程安全版,不允許存放null值,依賴於comparable的排序,不允許存放不可比較的對象類型。

SynchronousQueue:沒有容量的同步隊列,通過CAS實現併發訪問,支持FIFO和FILO。

LinkedTransferQueue:1.7新增,單向鏈表實現的無界阻塞隊列,通過CAS實現併發訪問,隊列元素使用 FIFO(先進先出)方式。LinkedTransferQueue可以說是ConcurrentLinkedQueue、SynchronousQueue(公平模式)和LinkedBlockingQueue的超集, 它不僅僅綜合了這幾個類的功能,同時也提供了更高效的實現

參考資料

java中併發包簡要分析:http://www.cnblogs.com/huangfox/archive/2012/08/16/2642666.html

JUC集合簡介:https://www.jianshu.com/p/a14eb91de66e

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章