java concurrent 之 PriorityBlockingQueue

java concurrent 之 PriorityBlockingQueue

PriorityBlockingQueue

一個無界阻塞隊列,它使用與類 PriorityQueue 相同的順序規(guī)則,并且提供了阻塞獲取操作。雖然此隊列邏輯上是無界的,但是資源被耗盡時試圖執(zhí)行 add 操作也將失敗(導(dǎo)致 OutOfMemoryError)。此類不允許使用 null 元素。依賴自然順序的優(yōu)先級隊列也不允許插入不可比較的對象(這樣做會導(dǎo)致拋出 ClassCastException)。

此類及其迭代器可以實現(xiàn) Collection 和 Iterator 接口的所有可選 方法。iterator() 方法中提供的迭代器并不 保證以特定的順序遍歷 PriorityBlockingQueue 的元素。如果需要有序地進行遍歷,則應(yīng)考慮使用 Arrays.sort(pq.toArray())。此外,可以使用方法 drainTo 按優(yōu)先級順序移除 全部或部分元素,并將它們放在另一個 collection 中。

在此類上進行的操作不保證具有同等優(yōu)先級的元素的順序。如果需要實施某一排序,那么可以定義自定義類或者比較器,比較器可使用修改鍵斷開主優(yōu)先級值之間的聯(lián)系。例如,以下是應(yīng)用先進先出 (first-in-first-out) 規(guī)則斷開可比較元素之間聯(lián)系的一個類。要使用該類,則需要插入一個新的 FIFOEntry(anEntry) 來替換普通的條目對象。

還要注意的是,在情況下,你從一個PriorityBlockingQueue,獲得一個Iterator,該迭代器不保證迭代的優(yōu)先級順序的元素。


BlockingQueue queue   = new PriorityBlockingQueue();

    //String implements java.lang.Comparable
    queue.put("Value");

    String value = queue.take();
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、迭代器 1. Iterator<E>: 對 collection 進行迭代的迭代器。迭代器取代了 Java C...
    Jk_zhuang閱讀 225評論 0 1
  • Java-Review-Note——4.多線程 標簽: JavaStudy PS:本來是分開三篇的,后來想想還是整...
    coder_pig閱讀 1,772評論 2 17
  • java筆記第一天 == 和 equals ==比較的比較的是兩個變量的值是否相等,對于引用型變量表示的是兩個變量...
    jmychou閱讀 1,645評論 0 3
  • 標簽(空格分隔): Java集合框架 問題思考 什么是集合框架? 為什么用集合框架? 怎么用集合框架? 問題解決 ...
    outSiderYN閱讀 760評論 0 13
  • 王小妮曾經(jīng)在《上課記》里的詩歌課作業(yè),有個議題“談生活背景,對人內(nèi)心的影響”,很多學(xué)生的共識是:好背景,意味著內(nèi)心...
    仰望天空的雙魚閱讀 360評論 0 1

友情鏈接更多精彩內(nèi)容