在Java中,ExecutorService
本身并不直接支持任務的優先級。但是,你可以通過使用PriorityBlockingQueue
和自定義的ThreadFactory
來實現任務優先級。
以下是一個簡單的示例,展示了如何使用PriorityBlockingQueue
和自定義的ThreadFactory
實現任務優先級:
Runnable
接口的任務類,并在其中添加一個priority
字段來表示任務的優先級。public class PriorityTask implements Runnable, Comparable<PriorityTask> {
private int priority;
private Runnable task;
public PriorityTask(int priority, Runnable task) {
this.priority = priority;
this.task = task;
}
public int getPriority() {
return priority;
}
@Override
public void run() {
task.run();
}
@Override
public int compareTo(PriorityTask other) {
return Integer.compare(other.priority, this.priority);
}
}
ThreadFactory
,用于創建具有優先級的線程。import java.util.concurrent.ThreadFactory;
public class PriorityThreadFactory implements ThreadFactory {
private int counter = 0;
@Override
public Thread newThread(Runnable r) {
Thread t = new Thread(r, "PriorityThread-" + counter++);
t.setDaemon(false);
t.setPriority(Thread.NORM_PRIORITY);
return t;
}
}
ExecutorService
,使用PriorityBlockingQueue
作為任務隊列,并使用自定義的ThreadFactory
創建線程。import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.PriorityBlockingQueue;
public class PriorityExecutorService {
public static void main(String[] args) {
PriorityBlockingQueue<Runnable> queue = new PriorityBlockingQueue<>();
ExecutorService executorService = new Executors.newFixedThreadPool(5, new PriorityThreadFactory());
executorService.submit(new PriorityTask(3, () -> System.out.println("Task 3")));
executorService.submit(new PriorityTask(1, () -> System.out.println("Task 1")));
executorService.submit(new PriorityTask(2, () -> System.out.println("Task 2")));
executorService.shutdown();
}
}
在這個示例中,我們創建了一個PriorityExecutorService
類,它使用PriorityBlockingQueue
作為任務隊列,并使用自定義的PriorityThreadFactory
創建線程。我們提交了三個具有不同優先級的任務。當你運行這個程序時,你會看到任務按照優先級順序執行。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。