Java的PriorityBlockingQueue优先级阻塞队列代码实例

 更新时间:2023年12月13日 10:35:07   作者:Terisadeng  
这篇文章主要介绍了Java的PriorityBlockingQueue优先级阻塞队列代码实例,PriorityBlockingQueue顾名思义是带有优先级的阻塞队列,为了实现按优先级弹出数据,存入其中的对象必须实现comparable接口自定义排序方法,需要的朋友可以参考下

PriorityBlockingQueue阻塞队列

PriorityBlockingQueue顾名思义是带有优先级的阻塞队列,为了实现按优先级弹出数据,存入其中的对象必须实现comparable接口自定义排序方法。

取出数据时会按照compareTo方法排序后的顺序取出。

首先是定义实现comparable接口的类:

/**
 * 添加到优先级队列的对象需要自定义排序方法
 * @author SN
 *
 */
public class Product implements Comparable<Product>{
	private int id;
	private String name;
	@Override
	public int compareTo(Product product){
		return this.id<product.id?-1:(this.id>product.id?1:0);
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String toString(){
		return this.id+","+this.name;
	}
}

然后是测试操作优先级阻塞队列:

import java.util.concurrent.PriorityBlockingQueue;
public class PriorityQueueExp {
	//优先级阻塞队列添加的对象必须实现comparable接口才能进行排序
	static PriorityBlockingQueue<Product> pbq=new PriorityBlockingQueue<>();
	public static void main(String[] args) throws InterruptedException {
		Product p1=new Product();
		p1.setId(1);
		p1.setName("数据1");
		Product p2=new Product();
		p2.setId(3);
		p2.setName("数据3");
		Product p3=new Product();
		p3.setId(2);
		p3.setName("数据2");
		Product p4=new Product();
		p4.setId(4);
		p4.setName("数据4");
		pbq.add(p1);
		pbq.add(p2);
		pbq.add(p3);
		pbq.add(p4);
		System.out.println("队列中的数据:"+pbq);
		System.out.println("取出队列中的第一个数据"+pbq.take().toString());
		System.out.println("队列中的数据:"+pbq);
		Product p5=new Product();
		p5.setId(1);
		p5.setName("数据1");
		pbq.add(p5);
		Product p6=new Product();
		p6.setId(6);
		p6.setName("数据6");
		pbq.add(p6);
		System.out.println("队列中的数据:"+pbq);
	}
}

值得注意的是,从打印结果看,数据插入队列是按先进先出的顺序插入的,并没有在插入队列时就提前排好序。在第一次取出数据后再次查看队列中的数据会发现,队列中的数据已经排好序,后面在进行任何插入、取出操作都会进行排序,因此可以得出优先级阻塞队列是延迟排序的,只有在第一次取出数据后才会进行排序。这样应该也是作者在设计优先级队列时进行的一个性能上的优化。类似于类的延迟加载。

到此这篇关于Java的PriorityBlockingQueue优先级阻塞队列代码实例的文章就介绍到这了,更多相关PriorityBlockingQueue阻塞队列内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JavaFx实现登录成功跳转到程序主页面

    JavaFx实现登录成功跳转到程序主页面

    这篇文章主要为大家详细介绍了JavaFx实现登录成功跳转到程序主页面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • Java使用DateTimeFormatter实现格式化时间

    Java使用DateTimeFormatter实现格式化时间

    这篇文章主要介绍了Java使用DateTimeFormatter实现格式化时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • Spring Data Elasticsearch 5.0.x修改数据后无法立即刷新解决方法示例

    Spring Data Elasticsearch 5.0.x修改数据后无法立即刷新解决方法示例

    这篇文章主要为大家介绍了Spring Data Elasticsearch 5.0.x修改数据后无法立即刷新解决方法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • idea已经提交到远程分支,但需要本地和远程都回退到某一版本问题

    idea已经提交到远程分支,但需要本地和远程都回退到某一版本问题

    这篇文章主要介绍了idea已经提交到远程分支,但需要本地和远程都回退到某一版本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • Java处理XSS漏洞的四种方法小结

    Java处理XSS漏洞的四种方法小结

    本文主要介绍了Java处理XSS漏洞的四种方法小结,包含使用HTML实体编码、使用内容安全策略(CSP)、使用框架内置的XSS防护和自定义过滤器等方法,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • 一文搞懂java中的栈和括号匹配

    一文搞懂java中的栈和括号匹配

    栈在我们日常编码中遇到的非常多,很多人对栈的接触可能仅仅局限在 递归使用的栈 和 StackOverflowException,栈是一种后进先出的数据结构(可以想象生化金字塔的牢房和生化角斗场的狗洞)
    2023-11-11
  • logback-spring.xml配置详解

    logback-spring.xml配置详解

    这篇文章主要介绍了logback-spring.xml详解,本文介绍了logback-spring.xml相关的知识与概念,结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • JavaWeb基础教程之Java基础加强版

    JavaWeb基础教程之Java基础加强版

    这篇文章主要介绍了JavaWeb基础教程之Java基础加强版的相关资料,需要的朋友可以参考下
    2016-07-07
  • Spring Data JPA 整合QueryDSL的使用案例

    Spring Data JPA 整合QueryDSL的使用案例

    QueryDSL 是一个用于构建类型安全的 SQL 查询的 Java 库,它的主要目标是简化在 Java 中构建和执行 SQL 查询的过程,同时提供类型安全性和更好的编码体验,对Spring Data JPA 整合QueryDSL使用案例感兴趣的朋友跟随小编一起看看吧
    2023-08-08
  • Struts2动态结果集代码示例

    Struts2动态结果集代码示例

    这篇文章主要介绍了Struts2动态结果集的有关内容,涉及具体代码示例,具有一定参考价值,需要的朋友可以了解下。
    2017-09-09

最新评论