Java容器-隊列
Java 隊列概述
- 隊列,先入先出(FIFO)的數據結構
- Queue(隊列)與 List、Set 同一級別,都繼承自 Collection 接口
- 在併發隊列上的實現上 JDK 提供了兩套不同的實現:
一個是以 BlockingQueue 接口爲代表的阻塞隊列
一個是以 ConcurrentLinkedQueue 類爲代表的高性能非阻塞隊列
Java 隊列的分類
根據功能劃分——阻塞隊列與非阻塞隊列
阻塞隊列與非阻塞隊列的區別爲:
當隊列爲空時,從隊列中獲取元素的操作將會被阻塞;
當隊列爲滿時,向隊列中添加元素的操作將會被阻塞;
試圖從爲空的阻塞隊列中獲取元素的線程將會被阻塞,直到其他的線程往空的隊列插入新的元素;
試圖向已滿的阻塞隊列中添加元素的線程將會被阻塞,直到其他的線程使隊列重新變得空閒起來;
阻塞隊列
非阻塞隊列
根據實現機制劃分——Queue
BlockingQueue
ArrayBlockingQueue
LinkedBlockingQueue
PriorityBlockingQueue
DelayQueue
SynchronousQueue
AbstractQueue
PriorityQueue
ConcurrentLinkedQueue
Deque
Java 隊列的相關操作
隊列的通用操作
操作 | 說明 | 詳細內容 |
---|---|---|
offer() | 入隊,添加一個元素並返回 true | 如果隊列已滿,則返回 false |
poll() | 出隊,移除並返問隊列頭部的元素 | 如果隊列爲空,則返回 null |
peek() | 取隊首元素值,只返回值,並不出隊 | 如果隊列爲空,則返回 null |
put() | 入隊 | 如果隊列已滿,則阻塞 |
take | 出隊,移除並返回隊列頭部的元素 | 如果隊列爲空,則阻塞 |
- size():獲取隊列長度
隊列的其他操作
- iterator():獲取隊列的迭代器
Java 隊列的應用
生產者-消費者模型
參考文檔
java隊列——queue詳細分析
java 隊列
Java併發編程–BlockingQueue
Java併發之BlockingQueue的使用