阻塞佇列BlockingQueue介面 類似食品櫃

2021-10-25 10:30:07 字數 1849 閱讀 4472

②linkedblockingqueue:由鍊錶結構組成的有界(大小預設為integer.max_value)阻塞佇列【21億多可看成無界。】

③synchronousqueue:不儲存元素的blockingqueue,也即單個元素的佇列。

總結:不做api呼叫工程師,要理解它的工作原理!

blockingqueue介面類似於list介面

①阻塞佇列有沒有好的一面?

②不得不阻塞,如何管理?

當阻塞佇列是空的時,從佇列中獲取元素的操作將會被阻塞,

當阻塞佇列是滿的時,往佇列裡新增元素的操作將會被阻塞。

類似生產者消費者模式

阻塞:在某些情況下會掛起執行緒,一旦條件滿足,被掛起的執行緒又會自動被喚醒

我們不需要關心什麼時候需要阻塞執行緒,什麼時候需要阻塞執行緒,因為這一切blockingqueue一手包辦。

blockingqueue:七大佇列(葫蘆娃)

integer.max_value約等於21億

常用:

public

class

blockingqueuedemo

private

static

void

delaytime()

throws interruptedexception

private

static

void

blocking()

throws interruptedexception

private

static

void

showtruefalse()

private

static

void

throwexception()

}

每乙個put()必須等待乙個take(),否則不能新增元素,反之亦然。

public

static

void

main

(string[

] args)

throws interruptedexception

private

static

void

synchronousqueue()

catch

(interruptedexception e)

trycatch

(interruptedexception e)

trycatch

(interruptedexception e)},

"aaa").

start()

;new

thread((

)->

catch

(interruptedexception e)

trycatch

(interruptedexception e)

trycatch

(interruptedexception e)},

"bbb").

start()

;}

結果:

併發工具包 阻塞佇列BlockingQueue

阻塞佇列,顧名思義 如果佇列滿了,那麼會進入阻塞狀態,當有消費者從佇列中取出資料後,再解除阻塞狀態。如果隊列為空,從佇列中取資料就會進入阻塞狀態。直至佇列中有資料為止。blockingqueue是介面,目前已知的實現類如下 arrayblockingqueue 底層底層通過陣列來儲存佇列中的元素,所...

等待佇列 阻塞非阻塞

阻塞 裝置驅動不阻塞,使用者想獲取裝置資源只能不停的查詢,這無謂的消耗cpu資源。而阻塞訪問,不能獲取資源的程序將進入休眠,它將cpu資源 禮讓 給其他程序 喚醒程序的地方最大可能發生在中斷裡面,因為硬體資源獲得的同時往往伴隨著乙個中斷 定義頭 wait queue head t queue 初始化...

阻塞佇列BlockingQueue

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