Java的PriorityBlockingQueue优先级阻塞队列代码实例
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阻塞队列内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Java使用DateTimeFormatter实现格式化时间
这篇文章主要介绍了Java使用DateTimeFormatter实现格式化时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-01-01Spring Data Elasticsearch 5.0.x修改数据后无法立即刷新解决方法示例
这篇文章主要为大家介绍了Spring Data Elasticsearch 5.0.x修改数据后无法立即刷新解决方法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-08-08idea已经提交到远程分支,但需要本地和远程都回退到某一版本问题
这篇文章主要介绍了idea已经提交到远程分支,但需要本地和远程都回退到某一版本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2023-11-11Spring Data JPA 整合QueryDSL的使用案例
QueryDSL 是一个用于构建类型安全的 SQL 查询的 Java 库,它的主要目标是简化在 Java 中构建和执行 SQL 查询的过程,同时提供类型安全性和更好的编码体验,对Spring Data JPA 整合QueryDSL使用案例感兴趣的朋友跟随小编一起看看吧2023-08-08
最新评论