juc 阻塞佇列BlockingQueue

2021-10-09 09:14:59 字數 1437 閱讀 5538

阻塞佇列blockingqueue的方法分類

方法型別

丟擲異常

特殊值阻塞

超時插入

add(e)

offer(e)

put(e)

offer(e,time,unit)

移除remove()

poll()

take()

poll(time,unit)

檢查element()

peek()

不可用不可用

丟擲異常

當阻塞佇列滿時,再往佇列裡add插入元素會丟擲異常。當阻塞隊列為空時,再從佇列裡remove移除元素會拋異常

特殊值插入方法,成功返回true,失敗返回false。移除方法,成功返回出佇列的元素,失敗返回null

一直阻塞

當阻塞佇列滿時,再往佇列裡put插入元素,佇列會一直阻塞生產者執行緒直到put資料或響應中斷退出。 當阻塞隊列為空時,再從佇列裡take移除元素,佇列會一直阻塞消費者執行緒直到佇列可用

超時退出

當阻塞佇列滿時,佇列會阻塞生產線程一定時間,超過限時後生產者執行緒會退出

演示**

/**

* * @title: test1

* @description: 測試「丟擲異常」

* @return: void

* @throws

*/public

static

void

test1()

/** *

* @title: test2

* @description: 測試「特殊值」

* @return: void

*/public

static

void

test2()

/** *

* @title: test3

* @description: 測試「阻塞」

* @return: void

*/public

static

void

test3()

catch

(interruptedexception e)

//測試take

trycatch

(interruptedexception e)

}/**

* * @title: test4

* @description: 測試「超時」

* @return: void

*/public

static

void

test4()

catch

(interruptedexception e)

//測試poll(time,unit)

trycatch

(interruptedexception e)

}

JUC 阻塞佇列

什麼是阻塞佇列 阻塞佇列常用於生產者和消費者場景,生產者是向佇列裡新增元素的執行緒,消費者是從佇列裡獲取元素的執行緒。阻塞佇列就是生產者用來存放元素 消費者用來獲取元素的容器 為什麼要使用阻塞佇列 就是適用在不得不阻塞的場景如上面所說生產者 和 消費者場景中 要是佇列中為空 消費者不得不進行阻塞 佇...

JUC阻塞佇列BlockingQueue

前言 最近面試和手動建立執行緒池時都用到了阻塞佇列,不由得產生好奇,一下原理 參考 目錄 第一章 基礎使用 第二章 實現原理 2.1 arrayblockingqueue 2.2 linkedblockingqueue 第三章 執行緒池中所之用的阻塞佇列 juc中實現乙個阻塞佇列一般都會實現bloc...

JUC學習 阻塞佇列

在這篇部落格中我們接觸的佇列都是非阻塞佇列,比如priorityqueue linkedlist linkedlist是雙向鍊錶,它實現了dequeue介面 阻塞佇列常用於執行緒池和生產者消費者的問題中 使用非阻塞佇列的時候有乙個很大問題就是 它不會對當前執行緒產生阻塞,那麼在面對類似消費者 生產者...