天天看點

BlockingQueue 接口詳解BlockingQueue 接口

BlockingQueue 接口

  • BlockingQueue 接口
    • ArrayBlockingQueue
    • LinkedBolckingQueue
    • SynchronousQueue
    • PriorityBlockingQueue
    • DelayQueue

ArrayBlockingQueue

Array**Blocking**Queue 是基于數組的阻塞隊列實作,在 ArrayBlockingQueue 内部,維護一個定長數組,以便緩存隊列中的資料對象,内部沒有實作讀寫分離,也就意味着生産者和消費者不能完全并行,長度是需要定義的,可以指定先進先出,或者先進後出,也叫有界隊列

LinkedBolckingQueue

Linked**Bolcking**Queue 基于連結清單實作的阻塞隊列,和 ArrayBlockingQueue 差不多,内部也維持着一個資料緩沖隊列(該隊列由連結清單構成),LinkedBolckingQueue 之是以能高效的處理并發資料,是因為其内部采用分離鎖(讀寫分離兩個鎖),進而實作生産者和消費者操作的完全并行。它是一個無界隊列

SynchronousQueue

SynchronousQueue, 是一個沒有緩沖的隊列,生産者産生的資料直接會被消費者擷取并且消費

PriorityBlockingQueue

PriorityBlockingQueue, 基于優先級的阻塞隊列(優先級的判斷通過構造函數的Compator對象決定,也就是說傳入隊列的對象必須實作Comparable接口),内部控制線程同步的鎖采用的是公平鎖,它也是一個無界隊列

DelayQueue:

DelayQueue,帶有延遲時間的 Queue, 其中的元素隻有當其指定的延遲時間到了,才能從隊列中擷取到該元素,DelayQueue 中的元素必須實作 Delayed接口,DelayQueue是一個沒有大小限制的隊列,應用場景有很多,比如對緩存逾時的資料進行移除,任務逾時處理,空閑連接配接的關閉。