Java的PriorityBlockingQueue優(yōu)先級阻塞隊列代碼實例
PriorityBlockingQueue阻塞隊列
PriorityBlockingQueue顧名思義是帶有優(yōu)先級的阻塞隊列,為了實現(xiàn)按優(yōu)先級彈出數(shù)據,存入其中的對象必須實現(xiàn)comparable接口自定義排序方法。
取出數(shù)據時會按照compareTo方法排序后的順序取出。
首先是定義實現(xiàn)comparable接口的類:
/**
* 添加到優(yōu)先級隊列的對象需要自定義排序方法
* @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;
}
}然后是測試操作優(yōu)先級阻塞隊列:
import java.util.concurrent.PriorityBlockingQueue;
public class PriorityQueueExp {
//優(yōu)先級阻塞隊列添加的對象必須實現(xiàn)comparable接口才能進行排序
static PriorityBlockingQueue<Product> pbq=new PriorityBlockingQueue<>();
public static void main(String[] args) throws InterruptedException {
Product p1=new Product();
p1.setId(1);
p1.setName("數(shù)據1");
Product p2=new Product();
p2.setId(3);
p2.setName("數(shù)據3");
Product p3=new Product();
p3.setId(2);
p3.setName("數(shù)據2");
Product p4=new Product();
p4.setId(4);
p4.setName("數(shù)據4");
pbq.add(p1);
pbq.add(p2);
pbq.add(p3);
pbq.add(p4);
System.out.println("隊列中的數(shù)據:"+pbq);
System.out.println("取出隊列中的第一個數(shù)據"+pbq.take().toString());
System.out.println("隊列中的數(shù)據:"+pbq);
Product p5=new Product();
p5.setId(1);
p5.setName("數(shù)據1");
pbq.add(p5);
Product p6=new Product();
p6.setId(6);
p6.setName("數(shù)據6");
pbq.add(p6);
System.out.println("隊列中的數(shù)據:"+pbq);
}
}
值得注意的是,從打印結果看,數(shù)據插入隊列是按先進先出的順序插入的,并沒有在插入隊列時就提前排好序。在第一次取出數(shù)據后再次查看隊列中的數(shù)據會發(fā)現(xiàn),隊列中的數(shù)據已經排好序,后面在進行任何插入、取出操作都會進行排序,因此可以得出優(yōu)先級阻塞隊列是延遲排序的,只有在第一次取出數(shù)據后才會進行排序。這樣應該也是作者在設計優(yōu)先級隊列時進行的一個性能上的優(yōu)化。類似于類的延遲加載。
到此這篇關于Java的PriorityBlockingQueue優(yōu)先級阻塞隊列代碼實例的文章就介紹到這了,更多相關PriorityBlockingQueue阻塞隊列內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java畢業(yè)設計實戰(zhàn)之食品溯源系統(tǒng)的實現(xiàn)
這是一個使用了java+Springboot+Maven+mybatis+Vue+mysql+wd開發(fā)的食品溯源系統(tǒng),是一個畢業(yè)設計的實戰(zhàn)練習,具有食品溯源該有的所有功能,感興趣的朋友快來看看吧2022-01-01
SpringBoot整合BCrypt實現(xiàn)密碼加密
這篇文章主要為大家詳細介紹了SpringBoot整合BCrypt進行密碼加密,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11
Mybatis useGeneratedKeys參數(shù)用法及問題小結
這篇文章主要介紹了Mybatis useGeneratedKeys參數(shù)用法及遇到的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05
Spring定時任務中@PostConstruct被多次執(zhí)行異常的分析與解決
這篇文章主要給大家介紹了關于Spring定時任務中@PostConstruct被多次執(zhí)行異常的分析與解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。2017-10-10
java面試題——詳解HashMap和Hashtable 的區(qū)別
本篇文章主要介紹了java中HashMap和Hashtable的區(qū)別,具有一定的參考價值,有需要的可以了解一下。2016-11-11

