java中Queue

在併發隊列中JDK提供了兩種隊列:數組

ConcurrentLinkedQueue:支持高性能的Queue緩存

BlockingQueue:帶阻塞的Queue安全


ConcurrentLinkedQueue是一種適用於高併發場景下的隊列,經過無鎖的方式,實現高併發狀態下的高性能,一般性能優於BlockingQueue.是一種基於鏈接節點的***線程安全隊列。遵循FIFO原則,不容許NULL.注意:size 方法不是 一個固定時間操做。因爲這些隊列的異步特性,肯定當前元素的數量須要遍歷這些元素。併發

add:將指定的元素插入到此隊列中(若是當即可行且不會違反容量限制),在成功時返回 true,若是當前沒有可用空間,則拋出 IllegalStateException異步

offer: 將指定元素插入到此隊列的尾部(若是當即可行且不會超出此隊列的容量),在成功時返回 true,若是此隊列已滿,則返回 falseide

poll:獲取並移除此隊列的頭,若是此隊列爲空,則返回 null函數

peek:獲取但不移除此隊列的頭;若是此隊列爲空,則返回 null高併發


BlockingQueue接口
性能


ArrayBlockingQueue是一鍾基於數組的阻塞隊列實現,其維護一個指定長度的數組,以便緩存隊列中的數據對象,內部沒有實現讀寫分離。能夠指定訪問策略。線程


LinkedBlockingQueue基於鏈表的阻塞隊列,內部鏈表實現,是一種***的隊列(建立無需指定長度)。內部實現了讀寫分離。


SynchronousQueue一種沒有緩存的隊列,生產者生產的數據直接會被消費者獲取並消費。


PriorityBlockingQueue基於優先級的阻塞隊列(優先級的判斷經過構造函數傳入的Compator對象決定,要求傳入對象實現Comparable接口),其內部控制線程同步的鎖採用的是公平鎖,也是一種***隊列


DelayQueue帶延遲時間的Queue,其中元素只有當其指定的延遲時間到了,才能在隊列中獲取到該元素。其中的元素須要實現Delayed接口。是一個***隊列。

相關文章
相關標籤/搜索