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阻塞队列内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Canal搭建 idea设置及采集数据到kafka的操作方法

    Canal搭建 idea设置及采集数据到kafka的操作方法

    这篇文章主要介绍了Canal搭建idea设置及采集数据到kafka的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • 基于jdk动态代理和cglib动态代理实现及区别说明

    基于jdk动态代理和cglib动态代理实现及区别说明

    这篇文章主要介绍了基于jdk动态代理和cglib动态代理实现及区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • 基于Java实现多线程下载并允许断点续传

    基于Java实现多线程下载并允许断点续传

    这篇文章主要介绍了基于Java实现多线程下载并允许断点续传,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Java Long类型对比分析

    Java Long类型对比分析

    这篇文章主要介绍了Java Long类型对比分析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • DoytoQuery中的分页排序方案示例详解

    DoytoQuery中的分页排序方案示例详解

    这篇文章主要为大家介绍了DoytoQuery中的分页排序方案示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Spring Boot监听Redis Key失效事件实现定时任务的示例

    Spring Boot监听Redis Key失效事件实现定时任务的示例

    这篇文章主要介绍了Spring Boot监听Redis Key失效事件实现定时任务的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • 使用Java编写GUI对话框的教程

    使用Java编写GUI对话框的教程

    这篇文章主要介绍了使用Java编写GUI对话框的教程,是Java图形化编程中的基础知识,需要的朋友可以参考下
    2015-10-10
  • java mybatis框架配置详解

    java mybatis框架配置详解

    在本篇文章里小编给大家整理的是一篇关于java mybatis框架配置详解内容,对此有兴趣的朋友们可以参考下。
    2021-02-02
  • 深入理解Java基础中的集合框架

    深入理解Java基础中的集合框架

    Java集合框架(Java Collections Framework, JCF)也称容器,这里可以类比 C++中的 STL,在这里主要对如下部分进行源码分析,及在面试中常见的问题,例如,在阿里面试常问到的 HashMap和ConcurrentHashMap原理等等,深入源码分析是面试中必备的技能
    2023-08-08
  • springBoot项目中的static和templates文件夹的使用

    springBoot项目中的static和templates文件夹的使用

    本文主要介绍了springBoot项目中的static和templates文件夹的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07

最新评论