Java中的PriorityBlockingQueue
介紹:
Java中的PriorityBlockingQueue實(shí)現(xiàn)了BlockingQueue接口并支持PriorityQueue的功能。 那么,什么是BlockingQueue?
以下適用于BlockingQueue的任何實(shí)現(xiàn):
- 嘗試檢索元素時,如果隊列為空,線程將等待
- 在有限制的BlockingQueue實(shí)現(xiàn)的情況下,線程將等待直到它有空間插入新元素
PriorityBlockingQueue是java.util.concurrent包中存在的無限制并發(fā)阻塞隊列 。 它不允許空值。
PriorityBlockingQueue中的元素根據(jù)其優(yōu)先級進(jìn)行輪詢。 默認(rèn)情況下,對象的自然順序被視為其優(yōu)先級。 我們可以通過實(shí)現(xiàn)Comparable接口或提供Comparator來覆蓋默認(rèn)優(yōu)先級。
假設(shè)我們有一個PriorityBlockingQueue,其中有兩個或更多具有最高優(yōu)先級的元素。 在這種情況下,輪詢將隨機(jī)返回其中之一。
創(chuàng)建
我們可以使用以下構(gòu)造函數(shù)之一來實(shí)例化PriorityBlockingQueue :
//creates an empty PriorityBlockingQueue with capacity of 11 PriorityBlockingQueue()//creates a PriorityBlockingQueue containing elements of c PriorityBlockingQueue(Collection c)//uses given initialCapacity to instantiate a PriorityBlockingQueue PriorityBlockingQueue(int initialCapacity)/*creates an empty PriorityBlockingQueue with given initialCapacity * which orders its elements using given comparator */ PriorityBlockingQueue(int initialCapacity, Comparator comparator)常用方法:
讓我們快速看一下在使用PriorityBlockingQueue時可以使用的方法:
1.插入:
要將元素插入PriorityBlockingQueue ,我們可以使用以下任何一種方法:
- 布爾值add(E e)
- 布爾報價(E e)
- 無效推(E e)
由于PriorityBlockingQueue是不受限制的,因此它們的行為均相同。 換句話說, offer(e)絕不會返回false , put(e)絕不會阻止該操作。
2.刪除:
我們可以通過以下方式之一刪除PriorityBlockingQueue中的元素:
- boolean remove(Object obj):此方法刪除對象obj(如果存在)并返回true 。 如果不存在這樣的元素,則返回false //Assuming pbq has [1, 4, 8] as its elements boolean result = pbq.remove(4); //true System.out.println(pbq); [1, 8]
- E poll(): poll()方法同時檢索和刪除隊列的head元素。 如果隊列為空,則返回null //Assuming pbq has [1, 4, 8] as its elements int polledItem = pbq.poll(); //1 System.out.println(pbq); [4, 8]
- E take()拋出InterruptedException:與poll()一樣 ,它檢索并刪除給定隊列開頭的元素。 但是, 它將進(jìn)行阻塞調(diào)用,即,如有必要,它將等待直到元素可用
3.其他方法:
其他常用的方法包括:
- e peek():檢索而不是從隊列中刪除元素 //Assuming pbq has [1, 4, 8] as its elements
int item = pbq.peek(); //1System.out.println(pbq); [1, 4, 8]
- boolean contains(Object obj):檢查給定的ob j是否存在于隊列中
- int size():返回隊列的大小
- void clear():刪除隊列中的所有元素
- Object [] toArray():返回一個數(shù)組,該數(shù)組包含上下文中隊列的所有元素
- 比較器比較器():返回比較器用于排序隊列中的元素
- intrainToTo(Collection c):刪除隊列中所有可用的元素,并將它們添加到給定的Collection中 。 它還返回傳輸?shù)脑財?shù)
- intrainTo(Collection c,int maxElements):從隊列中移除最多maxElements個元素,并將其添加到給定的Collection c中
結(jié)論:
在本快速教程中,我們探討了PriorityBlockingQueue是什么以及如何使用它。 它是線程安全的實(shí)現(xiàn),并阻止輪詢,直到某個元素可用為止。
成為第一個發(fā)表評論的人。
翻譯自: https://www.javacodegeeks.com/2019/05/priorityblockingqueue-java.html
總結(jié)
以上是生活随笔為你收集整理的Java中的PriorityBlockingQueue的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 王者荣耀电脑福利局(王者荣耀排位福利局)
- 下一篇: javafx中的tree_JavaFX中