亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java并發(fā)編程工具類(lèi)PriorityBlockingQueue優(yōu)先級(jí)隊(duì)列

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

前言

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

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

1. PriorityBlockingQueue 特性

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

2. PriorityBlockingQueue 應(yīng)用實(shí)例

我們寫(xiě)一個(gè)類(lèi)Employee,該類(lèi)實(shí)現(xiàn)了Comparable接口,所以其實(shí)例對(duì)象可以根據(jù)compareTo()函數(shù)定義的規(guī)則進(jìn)行排序。

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());  //根據(jù)id排序
    }
    @Override
    public String toString() {
        return "Employee [id=" + id + ", name=" + name + ", dob=" + dob + "]";
    }
}

構(gòu)造一個(gè)PriorityBlockingQueue對(duì)象,并向其內(nèi)部加入若干Employee對(duì)象,并使用poll方法從隊(duì)列內(nèi)取出元素。

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;
}

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

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)先級(jí)排序的實(shí)例

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

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

按照員工姓名進(jìn)行優(yōu)先級(jí)排序,所以打印順序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ā)編程工具類(lèi)PriorityBlockingQueue優(yōu)先級(jí)隊(duì)列的詳細(xì)內(nèi)容,更多關(guān)于java并發(fā)PriorityBlockingQueue隊(duì)列的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringMvc使用GoogleKaptcha生成驗(yàn)證碼

    SpringMvc使用GoogleKaptcha生成驗(yàn)證碼

    這篇文章主要為大家詳細(xì)介紹了SpringMvc項(xiàng)目中使用GoogleKaptcha 生成驗(yàn)證碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • 通過(guò)Java實(shí)現(xiàn)添加或刪除PDF中的附件

    通過(guò)Java實(shí)現(xiàn)添加或刪除PDF中的附件

    當(dāng)我們?cè)谥谱鱌DF文件或者PPT演示文稿的時(shí)候,為了讓自己的文件更全面詳細(xì),就會(huì)在文件中添加附件。本文為大家整理了Java實(shí)現(xiàn)添加或刪除PDF中的附件的方法,需要的可以參考下
    2023-01-01
  • Spring?MVC異步上傳、跨服務(wù)器上傳和文件下載功能實(shí)現(xiàn)

    Spring?MVC異步上傳、跨服務(wù)器上傳和文件下載功能實(shí)現(xiàn)

    這篇文章主要介紹了Spring?MVC異步上傳、跨服務(wù)器上傳和文件下載功能實(shí)現(xiàn),本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • java基礎(chǔ)的詳細(xì)了解第九天

    java基礎(chǔ)的詳細(xì)了解第九天

    這篇文章對(duì)Java編程語(yǔ)言的基礎(chǔ)知識(shí)作了一個(gè)較為全面的匯總,在這里給大家分享一下。需要的朋友可以參考,希望能給你帶來(lái)幫助
    2021-08-08
  • 在netty中使用native傳輸協(xié)議的方法

    在netty中使用native傳輸協(xié)議的方法

    這篇文章主要介紹了在netty中使用native傳輸協(xié)議,這里我們只以Kqueue為例介紹了netty中native傳輸協(xié)議的使用,需要的朋友可以參考下
    2022-05-05
  • Dwr3.0純注解(純Java Code配置)配置與應(yīng)用淺析一之零配置文件化

    Dwr3.0純注解(純Java Code配置)配置與應(yīng)用淺析一之零配置文件化

    Dwr對(duì)我來(lái)說(shuō)最重要的功能點(diǎn)就是反向Ajax調(diào)用,通俗來(lái)將就是后端可以直接調(diào)用前端的JS方法(只要在所能訪問(wèn)的范圍內(nèi)),這也就是Dwr的真正來(lái)由,當(dāng)然它也有最基本的前端直接調(diào)用后端的特性,省去了我們經(jīng)常的一般Ajax調(diào)用
    2016-04-04
  • Java多線程事務(wù)回滾@Transactional失效處理方案

    Java多線程事務(wù)回滾@Transactional失效處理方案

    這篇文章主要介紹了Java多線程事務(wù)回滾@Transactional失效處理方案,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-08-08
  • springboot整合RabbitMQ 中的 TTL實(shí)例代碼

    springboot整合RabbitMQ 中的 TTL實(shí)例代碼

    TTL 是 RabbitMQ 中一個(gè)消息或者隊(duì)列的屬性,表明一條消息或者該隊(duì)列中的所有消息的最大存活時(shí)間,單位是毫秒,這篇文章主要介紹了springboot整合RabbitMQ 中的 TTL,需要的朋友可以參考下
    2022-09-09
  • java?long?類(lèi)型數(shù)據(jù)的賦值方式

    java?long?類(lèi)型數(shù)據(jù)的賦值方式

    這篇文章主要介紹了java?long?類(lèi)型數(shù)據(jù)的賦值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Java 同步鎖(synchronized)詳解及實(shí)例

    Java 同步鎖(synchronized)詳解及實(shí)例

    這篇文章主要介紹了Java 同步鎖(synchronized)詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-03-03

最新評(píng)論