- ConcurrentLinkedQueue
- LinkedBlockingQueue
- ArrayBlockingQueue
- PriorityBlockingQueue
- DelayQueue
并發(fā)的隊列主要分為阻塞隊列和非阻塞隊列胸嘁,阻塞隊列使用鎖實現(xiàn)院溺,非阻塞隊列使用CAS實現(xiàn)
ConcurrentLinkedQueue:線程安全的無界非阻塞隊列,使用單向鏈表存儲够挂,入隊和出隊使用CAS實現(xiàn)
常用的操作:
- offer:隊尾添加元素钞速,使用CAS
- add:內(nèi)部調(diào)用offer 進行添加
- poll:隊頭獲取并移除元素:使用CAS
- peek:獲取隊頭元素贷掖,不移除:使用CAS
- size:計算隊列個數(shù),并發(fā)環(huán)境不是很有用渴语,因為CAS沒有加鎖苹威,在計算期間可能用刪除或者添加
- remove(obj):如果存在則刪除,如果有多個則刪除第一個:使用CAS
- contains:遍歷判斷是否含有驾凶,結(jié)果與size 函數(shù)類似也不是很準(zhǔn)確
LinkedBlockingQueue:使用獨占鎖ReentrantLock實現(xiàn)的阻塞安全隊列牙甫,默認(rèn)容量是0x7ffffff,用戶也可以自己指定容量,所以從一定意義上說是一個有界阻塞隊列
ArrayBlockingQueue:內(nèi)部使用有界數(shù)組進行存儲
put 和take 使用條件變量condition
offer 和poll通過簡單的加鎖進行操作
PriorityBlockingQueue:帶有優(yōu)先級的無界阻塞隊列调违,每次出隊返回優(yōu)先級最高或者最低的元素窟哺,內(nèi)部使用平衡二叉樹堆實現(xiàn)
PriorityBlockingQueue使用
DelayQueue:無界阻塞延遲隊列,隊列中每個元素都有過期時間技肩,獲取元素時且轨,只有過期元素才會出隊列,隊頭元素是最快過期的虚婿,內(nèi)部使用PriorityBlockingQueue存儲
DelayQueue使用