array**blocking**queue 是基於陣列的阻塞佇列實現,在 arrayblockingqueue 內部,維護乙個定長陣列,以便快取佇列中的資料物件,內部沒有實現讀寫分離,也就意味著生產者和消費者不能完全並行,長度是需要定義的,可以指定先進先出,或者先進後出,也叫有界佇列
linked**bolcking**queue 基於鍊錶實現的阻塞佇列,和 arrayblockingqueue 差不多,內部也維持著乙個資料緩衝佇列(該佇列由鍊錶構成),linkedbolckingqueue 之所以能高效的處理併發資料,是因為其內部採用分離鎖(讀寫分離兩個鎖),從而實現生產者和消費者操作的完全並行。它是乙個無界佇列
synchronousqueue, 是乙個沒有緩衝的佇列,生產者產生的資料直接會被消費者獲取並且消費
priorityblockingqueue, 基於優先順序的阻塞佇列(優先順序的判斷通過建構函式的compator物件決定,也就是說傳入佇列的物件必須實現comparable介面),內部控制線程同步的鎖採用的是公平鎖,它也是乙個無界佇列
delayqueue,帶有延遲時間的 queue, 其中的元素只有當其指定的延遲時間到了,才能從佇列中獲取到該元素,delayqueue 中的元素必須實現 delayed介面,delayqueue是乙個沒有大小限制的佇列,應用場景有很多,比如對快取超時的資料進行移除,任務超時處理,空閒連線的關閉。
阻塞佇列BlockingQueue介面 類似食品櫃
linkedblockingqueue 由鍊錶結構組成的有界 大小預設為integer.max value 阻塞佇列 21億多可看成無界。synchronousqueue 不儲存元素的blockingqueue,也即單個元素的佇列。總結 不做api呼叫工程師,要理解它的工作原理!blockingqu...
BlockingQueue介面和執行緒池
它有四套api,add remove操作失敗會直接丟擲異常,offer poll操作失敗會返回特殊值,還可以加時間,過了時間返回失敗,put take操作失敗會阻塞。arrayblockingqueue 是陣列實現的,必須構造時傳入大小,傳入後不可改變。delayqueue 實現delay介面,與排...
阻塞佇列BlockingQueue
例介紹乙個特殊的佇列 blockingqueue,如果blockingqueue是空的,從blockingqueue取東西的操作將會被阻斷進入等待狀態,直到blockingqueue進了東西才會被喚醒,同樣,如果blockingqueue是滿的,任何試圖往裡存東西的操作也會被阻斷進入等待狀態,直到b...