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的使用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章