Verwendung der Java-Thread-Warteschlange -PriorityBlockingQueue

PriorityBlockingQueue ist eine unbegrenzte Prioritätsblockierungswarteschlange, deren Elemente die Comparable-Schnittstelle implementieren oder beim Erstellen ein Comparator-Objekt angeben müssen. Es wird nach der Prioritätsreihenfolge der Elemente sortiert und die Elemente mit der höheren Priorität werden zuerst abgerufen.

PriorityBlockingQueue kann verwendet werden, um die Planung von Prioritätsaufgaben zu implementieren. Der folgende Code erstellt beispielsweise eine PriorityBlockingQueue und fügt ihr vier Aufgaben mit jeweils unterschiedlicher Priorität hinzu. Anschließend werden Aufgaben aus der Warteschlange in einer Schleife abgerufen und ausgedruckt.

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();
            }
        }
    }
}

Ausgabeergebnis:

Task{name='task3', priority=7}
Task{name='task1', priority=5}
Task{name='task4', priority=3}
Task{name='task2', priority=2}

Es ist ersichtlich, dass die Aufgaben in der Warteschlange in der Reihenfolge ihrer Priorität abgerufen werden, dh die Aufgabe mit der höchsten Priorität wird zuerst und die Aufgabe mit der niedrigsten Priorität als zweites abgerufen.

Supongo que te gusta

Origin blog.csdn.net/caicai250/article/details/131441615
Recomendado
Clasificación