PriorityBlockingQueue es una cola de bloqueo ilimitada de prioridad cuyos elementos deben implementar la interfaz Comparable o especificar un objeto Comparator al crearlo. Se ordenará de acuerdo con el orden de prioridad de los elementos, y los elementos con mayor prioridad se buscarán primero.
PriorityBlockingQueue se puede usar para implementar la programación de tareas prioritarias. Por ejemplo, el siguiente código crea un PriorityBlockingQueue y le agrega cuatro tareas, cada una con una prioridad diferente. Luego realiza un bucle para obtener tareas de la cola y las imprime.
import java.util.concurrent.PriorityBlockingQueue;
// 定义一个任务类,实现Comparable接口
class Task implements Comparable<Task> {
// 任务名称
private String name;
// 任务优先级
private int priority;
// 构造方法,传入任务名称和优先级
public Task(String name, int priority) {
this.name = name;
this.priority = priority;
}
@Override
public int compareTo(Task o) {
// 比较优先级,优先级大的排在前面
return Integer.compare(o.priority, this.priority);
}
@Override
public String toString() {
return "Task{" +
"name='" + name + '\'' +
", priority=" + priority +
'}';
}
}
public class PriorityBlockingQueueDemo {
public static void main(String[] args) {
// 创建一个优先级阻塞队列
PriorityBlockingQueue<Task> pbq = new PriorityBlockingQueue<>();
// 向队列中添加四个任务,注意它们的优先级
pbq.offer(new Task("task1", 5));
pbq.offer(new Task("task2", 2));
pbq.offer(new Task("task3", 7));
pbq.offer(new Task("task4", 3));
// 从队列中循环获取任务,并打印出来
while (pbq.size() > 0) {
try {
System.out.println(pbq.take());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Resultado de salida:
Task{name='task3', priority=7}
Task{name='task1', priority=5}
Task{name='task4', priority=3}
Task{name='task2', priority=2}
Se puede observar que las tareas de la cola se obtienen por orden de prioridad, es decir, se obtiene primero la tarea de mayor prioridad y en segundo lugar la tarea de menor prioridad.