阻塞佇列(blockingqueue)是乙個支援兩個附加操作的佇列。這兩個附加的操作是:在隊列為空時,獲取元素的執行緒會等待佇列變為非空。當佇列滿時,儲存元素的執行緒會等待佇列可用。阻塞佇列常用於生產者和消費者的場景,生產者是往佇列裡新增元素的執行緒,消費者是從佇列裡拿元素的執行緒。阻塞佇列就是生產者存放元素的容器,而消費者也只從容器裡拿元素。
異常:是指當阻塞佇列滿時候,再往佇列裡插入元素,會丟擲illegalstateexception(「queue full」)異常。當隊列為空時,從佇列裡獲取元素時會丟擲nosuchelementexception異常
方法\處理方式
丟擲異常
返回特殊值
一直阻塞
超時退出
插入方法
add(e)
offer(e)
put(e)
offer(e,time,unit)
移除方法
remove()
poll()
take()
poll(time,unit)
檢查方法
element()
peek()
不可用不可用
/**
* 丟擲異常
*/public
static
void
test1()
/*** 有返回值,沒有異常
*/public
static
void
test2()
/*** 等待,阻塞(一直阻塞)
*/public
static
void
test3()
throws interruptedexception
/*** 等待,阻塞(等待超時)
*/public
static
void
test4()
throws interruptedexception
/**
* 同步佇列
* 和其他的blockingqueue 不一樣, synchronousqueue 不儲存元素
* put了乙個元素,必須從裡面先take取出來,否則不能在put進去值!
*/public
class
synchronousqueuedemo
catch
(interruptedexception e)},
"t1").
start()
;new
thread((
)->
catch
(interruptedexception e)},
"t2"
).star
JUC 阻塞佇列
什麼是阻塞佇列 阻塞佇列常用於生產者和消費者場景,生產者是向佇列裡新增元素的執行緒,消費者是從佇列裡獲取元素的執行緒。阻塞佇列就是生產者用來存放元素 消費者用來獲取元素的容器 為什麼要使用阻塞佇列 就是適用在不得不阻塞的場景如上面所說生產者 和 消費者場景中 要是佇列中為空 消費者不得不進行阻塞 佇...
juc 阻塞佇列BlockingQueue
阻塞佇列blockingqueue的方法分類 方法型別 丟擲異常 特殊值阻塞 超時插入 add e offer e put e offer e,time,unit 移除remove poll take poll time,unit 檢查element peek 不可用不可用 丟擲異常 當阻塞佇列滿時...
JUC阻塞佇列BlockingQueue
前言 最近面試和手動建立執行緒池時都用到了阻塞佇列,不由得產生好奇,一下原理 參考 目錄 第一章 基礎使用 第二章 實現原理 2.1 arrayblockingqueue 2.2 linkedblockingqueue 第三章 執行緒池中所之用的阻塞佇列 juc中實現乙個阻塞佇列一般都會實現bloc...