阻塞佇列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介面 阻塞佇列常用於執行緒池和生產者消費者的問題中 使用非阻塞佇列的時候有乙個很大問題就是 它不會對當前執行緒產生阻塞,那麼在面對類似消費者 生產者...