Java 幾種隊列區別的簡單說明


前言

  隊列,字面意思就可以明白. 是一種線性的數據暫存與管理工具. 也可以讓各種業務功能進行逐個的隊列運行. 此篇博客只說明一下Java有幾種隊列

未阻塞和阻塞隊列的區別

  未阻塞:

    1.未阻塞的隊列在並發想隊列添加或者取得數據的時候,必定只會有一個成功,其他都可能添加失敗.

  阻塞:

    1.阻塞的隊列會進行線程阻塞操作,讓並發的添加或者取得數據進行一定程度的延遲,可以保證大量並發數據的添加. 但是阻塞也是有超時時間的.. 超過一段時間后依然會拋出異常或者拋出false

 

沒有實現阻塞接口

LinkList

實現java.util.Queue的LinkList,

PriorityQueue

實現java.util.AbstractQueue接口內置的不阻塞隊列

ConcurrentLinkedQueue

實現java.util.AbstractQueue接口內置的不阻塞隊列

 

實現阻塞接口的

java.util.concurrent 中加入了 BlockingQueue 接口和五個阻塞隊列類。它實質上就是一種帶有一點扭曲的 FIFO 數據結構。不是立即從隊列中添加或者刪除元素,線程執行操作阻塞,直到有空間或者元素可用。
五個隊列所提供的各有不同:  

ArrayBlockingQueue :

一個由數組支持的有界隊列。

LinkedBlockingQueue :

一個由鏈接節點支持的可選有界隊列。LinkedBlockingQueue的容量(在不指定時容量為Integer.MAX_VALUE),但是也可以選擇指定其最大容量,它是基於鏈表的隊列,此隊列按 FIFO(先進先出)排序元素。

PriorityBlockingQueue :

一個由優先級堆支持的無界(沒有容量限制)優先級隊列。 是一個帶優先級的 隊列,而不是先進先出隊列。元素按優先級順序被移除.

DelayQueue :

一個由優先級堆支持的、基於時間的調度隊列。(基於PriorityQueue來實現的)是一個存放Delayed 元素的無界阻塞隊列,只有在延遲期滿時才能從中提取元素。該隊列的頭部是延遲期滿后保存時間最長的 Delayed 元素。如果延遲都還沒有期滿,則隊列沒有頭部,並且poll將返回null。當一個元素的 getDelay(TimeUnit.NANOSECONDS) 方法返回一個小於或等於零的值時,則出現期滿,poll就以移除這個元素了。此隊列不允許使用 null 元素。

SynchronousQueue :

一個利用 BlockingQueue 接口的簡單聚集(rendezvous)機制。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM