PriorityBlockingQueue是一种带优先级的无界阻塞队列,它的元素必须实现Comparable接口,或者在创建时指定一个Comparator对象。它会根据元素的优先级顺序进行排序,优先级高的元素先被获取。
PriorityBlockingQueue可以用于实现优先级任务调度,例如下面的代码创建了一个PriorityBlockingQueue,并向其中添加了四个任务,每个任务有不同的优先级。然后从队列中循环获取任务,并打印出来。
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();
}
}
}
}
输出结果:文章来源:https://www.toymoban.com/news/detail-507535.html
Task{name='task3', priority=7}
Task{name='task1', priority=5}
Task{name='task4', priority=3}
Task{name='task2', priority=2}
可以看到,队列中的任务按照优先级的顺序被获取,即先获取优先级最高的任务,后获取优先级最低的任务。文章来源地址https://www.toymoban.com/news/detail-507535.html
到了这里,关于Java线程队列的使用-PriorityBlockingQueue的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!