java中Queue
在併發佇列中JDK提供了兩種佇列:
ConcurrentLinkedQueue:支援高效能的Queue
BlockingQueue:帶阻塞的Queue
ConcurrentLinkedQueue是一種適用於高併發場景下的佇列,通過無鎖的方式,實現高併發狀態下的高效能,通常效能優於BlockingQueue.是一種基於連線節點的無界執行緒安全佇列。遵循FIFO原則,不允許NULL.注意:size 方法不是 一個固定時間操作。由於這些佇列的非同步特性,確定當前元素的數量需要遍歷這些元素。
add:將指定的元素插入到此佇列中(如果立即可行且不會違反容量限制),在成功時返回 true,如果當前沒有可用空間,則丟擲 IllegalStateException
。offer: 將指定元素插入到此佇列的尾部(如果立即可行且不會超出此佇列的容量),在成功時返回 true,如果此佇列已滿,則返回 false。
poll:獲取並移除此佇列的頭,如果此佇列為空,則返回 null
peek:獲取但不移除此佇列的頭;如果此佇列為空,則返回 null。
BlockingQueue介面
ArrayBlockingQueue是一鍾基於陣列的阻塞佇列實現,其維護一個指定長度的陣列,以便快取佇列中的資料物件,內部沒有實現讀寫分離。可以指定訪問策略。
LinkedBlockingQueue基於連結串列的阻塞佇列,內部連結串列實現,是一種無界的佇列(建立無需指定長度)。內部實現了讀寫分離。
SynchronousQueue一種沒有快取的佇列,生產者生產的資料直接會被消費者獲取並消費。
PriorityBlockingQueue基於優先順序的阻塞佇列(優先順序的判斷通過建構函式傳入的Compator物件決定,要求傳入物件實現Comparable介面),其內部控制執行緒同步的鎖採用的是公平鎖,也是一種無界佇列
DelayQueue帶延遲時間的Queue,其中元素只有當其指定的延遲時間到了,才能在佇列中獲取到該元素。其中的元素需要實現Delayed介面。是一個無界佇列。