阻塞佇列使用方式詳解

2021-07-13 13:14:33 字數 1933 閱讀 8383

阻塞佇列

方法\處理方式

丟擲異常

返回特殊值

一直阻塞

超時退出

插入方法

add(e)

offer(e)

put(e)

offer(e,time,unit)

移除方法

remove()

poll()

take()

poll(time,unit)

檢查方法

element()

peek()

不可用不可用

丟擲異常:

生產者在add

時當佇列滿時會丟擲異常;消費者當佇列空時會丟擲異常

返回特殊值:執行緒不會被阻塞

生產者在offer

的時候,如果佇列滿時會返回

false;消費者當佇列空時會返回null

一直阻塞:

生產者在put

時當佇列滿時會一直等待,知道佇列不滿、響應中斷退出;消費者當佇列空時會一直等待,直到有資料或者響應中斷

超時退出:

生產者在offer

時,如果佇列滿時會等待

time

時間,單位是

unit,

如果等待這些時間後仍然是滿的會返回

false;消費者當佇列空時會等待time

時間,單位是

unit,

如果仍然是空會返回

null

注意:

返回特殊值和一直阻塞的區別是,如果是offer/poll當不滿足條件時不會被阻塞,而是直接返回true或者false  null或者具體值,而put/take會一直被阻塞

put/take

public class querytest  catch (exception e) }}

}).start();

new thread(new runnable() catch (interruptedexception e)

}}).start();

try catch (interruptedexception e)

}}

結果:

thread-0---put suc

thread-0---put suc

thread-0---put suc

thread-0---put suc

thread-1 獲取資料--->0

thread-0---put suc//阻塞,等待滿足條件

offer/take

public class querytest  catch (exception e) }}

}).start();

new thread(new runnable() catch (interruptedexception e)

}}).start();

try catch (interruptedexception e)

}}

結果:

true---put suc 0

true---put suc 1

true---put suc 2

true---put suc 3

false---put suc 4//沒有被阻塞而是直接執行

false---put suc 5

false---put suc 6

false---put suc 7

false---put suc 8

false---put suc 9

thread-1 獲取資料--->0

阻塞佇列BlockingQueue使用

blockingqueue的原理及方法 blockingqueue最終會有四種狀況,丟擲異常 返回特殊值 阻塞 超時,下表總結了這些方法 丟擲異常 特殊值阻塞 超時插入add e offer e put e offer e,time,unit 移除remove poll take poll time...

阻塞佇列理論以及使用

在多執行緒領域,所謂阻塞,在某些情況下會掛起執行緒 即阻塞 一旦滿足條件,被掛起的執行緒又會自動被喚醒。為什麼需要blockingqueue?好處是我們不需要關心什麼時候需要阻塞執行緒,什麼時候需要喚醒執行緒,因為這一切blockingqueue已經做好阻塞的控制。黃色標記的是重點!arrayblo...

等待佇列 阻塞非阻塞

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