BlockingQueue實現類 一

2021-10-25 07:26:51 字數 876 閱讀 3697

這一系列主要聚焦blockingqueue的實現類,稱之為阻塞佇列,到底代表什麼含義,我們不打算從註發布發,從實現類出發,第乙個分析arrayblockingqueue。

從構造方法出發。

public

arrayblockingqueue

(int capacity,

boolean fair)

還是從offer出發吧。因為add裡面呼叫的也是add,只不過add會丟擲異常,offer不會異常只會返回false。

public

boolean

offer

(e e)

}finally

}

再比較下put方法。

public

void

put(e e)

throws interruptedexception

finally

}

這個方法跟offer方法別無二致,就是如果滿的情況會阻塞。

//很簡單往佇列新增e,如果新增成功那麼釋放notempty鎖。

private

void

enqueue

(e x)

//看下poll方法。

public e poll()

finally

}

可以模擬take方法也會阻塞,如果為空。

private e dequeue()

到這裡可以關注到實際上是乙個生產者消費者模型。這個佇列是有固定容器大小的。

阻塞佇列BlockingQueue

例介紹乙個特殊的佇列 blockingqueue,如果blockingqueue是空的,從blockingqueue取東西的操作將會被阻斷進入等待狀態,直到blockingqueue進了東西才會被喚醒,同樣,如果blockingqueue是滿的,任何試圖往裡存東西的操作也會被阻斷進入等待狀態,直到b...

其他幾種BlockingQueue

priorityblockingqueue是一種基於優先順序的阻塞佇列,優先順序的判斷通過建構函式傳入compator物件來決定,也就是說傳入佇列的物件必須實現comparable介面 在實現priorityblockingqueue時,內部控制線程同步的鎖採用的是公平鎖。然後這個容器在新增物件的時...

BlockingQueue 介面詳解

array blocking queue 是基於陣列的阻塞佇列實現,在 arrayblockingqueue 內部,維護乙個定長陣列,以便快取佇列中的資料物件,內部沒有實現讀寫分離,也就意味著生產者和消費者不能完全並行,長度是需要定義的,可以指定先進先出,或者先進後出,也叫有界佇列 linked b...