這一系列主要聚焦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...