PriorityBlockingQueue的简单介绍
队列通常是先进先出的,而PriorityQueue是按照元素的优先级从小到大出队列的。正因为如此,
PriorityQueue中的2个元素之间需要可以比较大小,并实现Comparable接口

因为使用PriorityBlockingQueue中默认比较器,当数据无法比较,这是需要我们自定义比较器
package com.java.test.prioritys.blockings.queues;
import lombok.Builder;
import lombok.Data;
/**
* @author yourheart
* @Description
* @create 2022-11-16 23:24
*/
@Data
@Builder
public class User implements Comparable<User> {
private String number;
private String name;
@Override
public int compareTo(User o) {
if (this.number.charAt(0) == o.getNumber().charAt(0)) {
return this.number.compareTo(o.getNumber());
}
if (this.number.charAt(0) == 'V') {
return -1;
} else {
return 1;
}
}
}
@Test
public void userTest(){
PriorityBlockingQueue<User> queue = new PriorityBlockingQueue<>();
queue.add(User.builder().number("A13").name("小白").build());
queue.add(User.builder().number("V13").name("小红").build());
queue.add(User.builder().number("A23").name("小绿").build());
queue.add(User.builder().number("V33").name("小红").build());
for (int i=0;i<4;i++){
User poll = queue.poll();
log.info("poll:{}",poll);
}
}



put中使用的是offer方法


和ArrayBlockingQueu区别不大,主要不同是用数组实现了一个二叉堆,实现队列按优先级从小到大出队列,队列长度不够后,自动扩容,生产者不用考虑阻塞问题
浙公网安备 33010602011771号