JUC 9 阻塞佇列

2021-10-14 03:12:43 字數 1395 閱讀 5001

阻塞佇列(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...