📅  最后修改于: 2023-12-03 15:01:56.493000             🧑  作者: Mango
PriorityBlockingQueue 类是 Java 并发包中的一个线程安全的优先级队列实现。它实现了 BlockingQueue
接口,可以用于多线程环境下的高效生产者-消费者模型。
Comparator
来定义元素的优先级。在 PriorityBlockingQueue 中,元素可以通过实现 Comparable 接口来定义自己的优先级,或者在创建队列时,通过传入 Comparator
对象来定义对象的优先级。如果元素既实现了 Comparable 接口又指定了 Comparator 对象,则 Comparator 对象的优先级定义将覆盖 Comparable 接口。
下面是一个使用 Comparable 接口的例子,假设我们有一个自定义的 Task 类:
public class Task implements Comparable<Task>{
private String name;
private int priority;
public Task(String name, int priority) {
this.name = name;
this.priority = priority;
}
public int compareTo(Task other) {
return Integer.compare(this.priority, other.priority);
}
}
下面的示例演示了 PriorityBlockingQueue 的基本用法:
import java.util.concurrent.PriorityBlockingQueue;
public class PriorityBlockingQueueExample {
public static void main(String[] args) {
PriorityBlockingQueue<Task> queue = new PriorityBlockingQueue<>();
queue.add(new Task("Task 1", 3));
queue.add(new Task("Task 2", 2));
queue.add(new Task("Task 3", 1));
while (!queue.isEmpty()) {
Task task = queue.poll();
System.out.println("Processing task: " + task.getName());
}
}
}
在上面的示例中,我们创建了一个 PriorityBlockingQueue 对象,并向队列中添加了三个 Task 对象。由于 Task 对象实现了 Comparable 接口,它们会根据优先级自动排序。在循环中,我们使用 poll()
方法按拥有最高优先级的 Task 开始处理,直到队列为空。
以上就是 Java 中的 PriorityBlockingQueue 类的介绍。它是一个高效、线程安全的优先级队列实现,适用于多线程环境下的任务调度等场景。