最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java并發(fā)編程工具類PriorityBlockingQueue優(yōu)先級隊列

 更新時間:2022年03月16日 10:13:26   作者:字母哥哥  
這篇文章主要為大家介紹了java并發(fā)編程工具類PriorityBlockingQueue優(yōu)先級隊列的方法示例應用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步

前言

在之前的文章中已經為大家介紹了java并發(fā)編程的工具:BlockingQueue接口、ArrayBlockingQueue、DelayQueue、LinkedBlockingQueue,本文為系列文章第五篇。

Java PriorityBlockingQueue隊列是BlockingQueue接口的實現類,它根據priority優(yōu)先級確定隊列內元素對象的處理順序,也就是說在一個PriorityBlockingQueue隊列中,被添加到隊列中的元素,根據priority進行排序。PriorityBlockingQueue具有BlockingQueue阻塞隊列的一些特性,如果您不熟悉BlockingQueue可以參看我之前的文章。

1. PriorityBlockingQueue 特性

  • PriorityBlockingQueue 是一個無界隊列(隊列內元素個數沒有上限),隊列容量可以自動增長。其初始化隊列容量為11,也可以通過構造函數參數initialCapacity指定其初始化容量。
  • 不接受 NULL對象插入到PriorityBlockingQueue
  • 添加到PriorityBlockingQueue隊列中的元素對應的Java類,通常需要實現Comparable接口或者是可以默認排序的對象(如數字、字符串),否則會拋出ClassCastException
  • 可以使用java8 的Comparator提供自定義隊列內元素的排序規(guī)則,后文會舉例說明。
  • 如果存在多個對象擁有相等的優(yōu)先級,從隊列中poll獲取元素的時候可能獲取到其中任何一個元素。
  • PriorityBlockingQueue 是線程安全的

2. PriorityBlockingQueue 應用實例

我們寫一個類Employee,該類實現了Comparable接口,所以其實例對象可以根據compareTo()函數定義的規(guī)則進行排序。

public class Employee implements Comparable<Employee> {
    private Long id;
    private String name;
    private LocalDate dob;
    //Getters and setters
    public Employee(Long id, String name, LocalDate dob) {
        super();
        this.id = id;
        this.name = name;
        this.dob = dob;
    }
    @Override
    public int compareTo(Employee emp) {
        return this.getId().compareTo(emp.getId());  //根據id排序
    }
    @Override
    public String toString() {
        return "Employee [id=" + id + ", name=" + name + ", dob=" + dob + "]";
    }
}

構造一個PriorityBlockingQueue對象,并向其內部加入若干Employee對象,并使用poll方法從隊列內取出元素。

PriorityBlockingQueue<Employee> priorityBlockingQueue = new PriorityBlockingQueue<>();
priorityBlockingQueue.add(new Employee(1l, "AAA", LocalDate.now()));
priorityBlockingQueue.add(new Employee(4l, "CCC", LocalDate.now()));
priorityBlockingQueue.add(new Employee(5l, "BBB", LocalDate.now()));
priorityBlockingQueue.add(new Employee(2l, "FFF", LocalDate.now()));
priorityBlockingQueue.add(new Employee(3l, "DDD", LocalDate.now()));
priorityBlockingQueue.add(new Employee(6l, "EEE", LocalDate.now()));
while(true) {
  Employee e = priorityBlockingQueue.poll();
  System.out.println(e);

  if(e == null) break;
}

根據上文中compareTo()方法定義的排序規(guī)則,按照id為優(yōu)先級,所以從隊列中拿出對象并打印的順序如下:

Employee [id=1, name=AAA, dob=2021-03-25]
Employee [id=2, name=FFF, dob=2021-03-25]
Employee [id=3, name=DDD, dob=2021-03-25]
Employee [id=4, name=CCC, dob=2021-03-25]
Employee [id=5, name=BBB, dob=2021-03-25]
Employee [id=6, name=EEE, dob=2021-03-25]

3. 使用 Java8 Comparator 做優(yōu)先級排序的實例

我們可以使用java 8 Comparator排序器,來定義優(yōu)先級排序規(guī)則。使用構造方法PriorityBlockingQueue(int initialCapacity, Comparator comparator) 構造PriorityBlockingQueue隊列。

//以員工名稱的字符串自然正序進行排序
Comparator<Employee> nameSorter = Comparator.comparing(Employee::getName);
PriorityBlockingQueue<Employee> priorityBlockingQueue = new PriorityBlockingQueue<>( 11, nameSorter );
//此處省略向隊列中添加對象,及循環(huán)取出對象打印的代碼,參考上文

按照員工姓名進行優(yōu)先級排序,所以打印順序AAA、BBB、CCC、DDD、EEE、FFF

Employee [id=1, name=AAA, dob=2021-03-25]
Employee [id=5, name=BBB, dob=2021-03-25]
Employee [id=4, name=CCC, dob=2021-03-25]
Employee [id=3, name=DDD, dob=2021-03-25]
Employee [id=6, name=EEE, dob=2021-03-25]
Employee [id=2, name=FFF, dob=2021-03-25]

以上就是java并發(fā)編程工具類PriorityBlockingQueue優(yōu)先級隊列的詳細內容,更多關于java并發(fā)PriorityBlockingQueue隊列的資料請關注腳本之家其它相關文章!

相關文章

  • Java中TCP和UDP實現的全過程

    Java中TCP和UDP實現的全過程

    Java作為企業(yè)級應用開發(fā)的中流砥柱,提供了強大而靈活的網絡編程能力,其核心就是對TCP和UDP協議的支持,本文將深入剖析Java中TCP和UDP協議的實現細節(jié),需要的朋友可以參考下
    2026-02-02
  • FreeMarker如何調用Java靜態(tài)方法及靜態(tài)變量方法

    FreeMarker如何調用Java靜態(tài)方法及靜態(tài)變量方法

    這篇文章主要介紹了FreeMarker如何調用Java靜態(tài)方法及靜態(tài)變量方法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java遞歸實現菜單樹的方法詳解

    Java遞歸實現菜單樹的方法詳解

    這篇文章主要為大家詳細介紹了Java遞歸實現菜單樹的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • java實現超市商品庫存管理平臺

    java實現超市商品庫存管理平臺

    這篇文章主要為大家詳細介紹了java實現超市商品庫存管理平臺,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Java實現為Word每一頁設置不同圖片水印的效果

    Java實現為Word每一頁設置不同圖片水印的效果

    Word中設置水印時,可加載圖片設置為水印效果,但通常添加水印效果時,會對所有頁面都設置成統(tǒng)一效果。所以本文為大家介紹了一個方法,可以實現對每一頁或者某個頁面設置不同的水印效果,需要的可以參考一下
    2022-02-02
  • SWT(JFace) 簡易瀏覽器 制作實現代碼

    SWT(JFace) 簡易瀏覽器 制作實現代碼

    SWT(JFace) 簡易瀏覽器 制作實現代碼
    2009-06-06
  • Java回調函數與觀察者模式實例代碼

    Java回調函數與觀察者模式實例代碼

    這篇文章主要介紹了Java回調函數與觀察者模式實例代碼,簡單介紹了使用觀察者模式的場景,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • SpringBoot基于knife4j生成接口文檔方式

    SpringBoot基于knife4j生成接口文檔方式

    Knife4j介紹一個基于Swagger的JavaAPI文檔生成工具,提供美觀界面和高級功能,本文詳細介紹了在SpringBoot項目中集成Knife4j的方法,包括導入依賴、創(chuàng)建Swagger配置和WebMvcConfiguration配置類等
    2026-05-05
  • Java中如何執(zhí)行多條shell/bat命令

    Java中如何執(zhí)行多條shell/bat命令

    這篇文章主要介紹了Java中如何執(zhí)行多條shell/bat命令的方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java IO流深入理解

    Java IO流深入理解

    這篇文章主要介紹了java IO流的深入理解,下面和小編來一起學習一下吧,希望能給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容
    2021-07-07

最新評論

永泰县| 四川省| 聂荣县| 五河县| 宜兰市| 蚌埠市| 秭归县| 凤山县| 高青县| 嵊州市| 乌拉特前旗| 合山市| 兖州市| 探索| 龙井市| 甘南县| 阳高县| 昌平区| 孟村| 呈贡县| 黄冈市| 日照市| 海伦市| 常宁市| 灯塔市| 黔东| 济源市| 伊宁县| 盐源县| 额济纳旗| 高阳县| 赤水市| 内丘县| 卢氏县| 互助| 岳西县| 原阳县| 通渭县| 修水县| 南充市| 甘德县|