JavaFutureTask
是一個實現了 RunnableFuture
接口的類,它允許你在一個單獨的線程中執行任務。要實現任務調度,你可以使用 ScheduledExecutorService
。以下是一個簡單的示例,展示了如何使用 JavaFutureTask
和 ScheduledExecutorService
實現任務調度:
import java.util.concurrent.*;
Runnable
接口的任務類:class MyTask implements Runnable {
private String taskName;
public MyTask(String taskName) {
this.taskName = taskName;
}
@Override
public void run() {
System.out.println("Executing task: " + taskName);
try {
// 模擬任務執行耗時
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Task completed: " + taskName);
}
}
public static ScheduledFuture<?> scheduleTask(ScheduledExecutorService executor, MyTask task, long delay, TimeUnit unit) {
// 使用 JavaFutureTask 包裝任務
JavaFutureTask<Void> futureTask = new JavaFutureTask<>(task, null);
// 調度任務
return executor.schedule(futureTask, delay, unit);
}
main
方法中創建一個 ScheduledExecutorService
實例,并調度任務:public static void main(String[] args) {
// 創建一個具有單個線程的 ScheduledExecutorService
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
// 創建任務實例
MyTask task1 = new MyTask("Task 1");
MyTask task2 = new MyTask("Task 2");
// 調度任務,延遲 3 秒后執行,每隔 1 秒執行一次
ScheduledFuture<?> future1 = scheduleTask(executor, task1, 3, TimeUnit.SECONDS);
ScheduledFuture<?> future2 = scheduleTask(executor, task2, 0, TimeUnit.SECONDS);
// 添加任務完成時的監聽器
future1.addListener(() -> System.out.println("Task 1 completed."), executor);
future2.addListener(() -> System.out.println("Task 2 completed."), executor);
// 關閉 executor
executor.shutdown();
}
在這個示例中,我們創建了一個名為 MyTask
的任務類,它實現了 Runnable
接口。然后,我們創建了一個名為 scheduleTask
的方法,該方法接受一個 ScheduledExecutorService
實例、一個任務實例、一個延遲以及一個時間單位作為參數。這個方法使用 JavaFutureTask
包裝任務,并使用 ScheduledExecutorService
的 schedule
方法調度任務。
在 main
方法中,我們創建了一個 ScheduledExecutorService
實例,并調度了兩個任務。第一個任務延遲 3 秒后執行,第二個任務立即執行。我們還為每個任務添加了一個監聽器,當任務完成時,它將打印一條消息。最后,我們關閉了 executor
。