JavaFutureTask
是 Java 并發編程中的一個類,它實現了 RunnableFuture
接口。JavaFutureTask
可以用于異步計算任務,并將結果存儲在內部的一個 V
類型的變量中。你可以通過 get()
方法獲取任務的結果,或者通過 cancel()
方法取消任務的執行。
要控制 JavaFutureTask
的執行順序,你可以使用以下方法:
使用線程池(ExecutorService
):
通過將 JavaFutureTask
提交給一個線程池,你可以控制任務的執行順序。線程池會按照任務提交的順序執行任務。以下是一個簡單的示例:
import java.util.concurrent.*;
public class Main {
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(3);
Future<Integer> future1 = executorService.submit(new JavaFutureTask<>(() -> {
// 任務1的計算邏輯
return 1;
}));
Future<Integer> future2 = executorService.submit(new JavaFutureTask<>(() -> {
// 任務2的計算邏輯
return 2;
}));
Future<Integer> future3 = executorService.submit(new JavaFutureTask<>(() -> {
// 任務3的計算邏輯
return 3;
}));
try {
System.out.println("任務1的結果: " + future1.get());
System.out.println("任務2的結果: " + future2.get());
System.out.println("任務3的結果: " + future3.get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
executorService.shutdown();
}
}
使用 CompletableFuture
:
CompletableFuture
是 Java 8 引入的一個類,它提供了更強大的異步編程功能。你可以使用 CompletableFuture
的鏈式方法來控制任務的執行順序。以下是一個簡單的示例:
import java.util.concurrent.*;
public class Main {
public static void main(String[] args) {
CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> {
// 任務1的計算邏輯
return 1;
});
CompletableFuture<Integer> future2 = future1.thenApplyAsync(result -> {
// 任務2的計算邏輯,依賴于任務1的結果
return result + 1;
});
CompletableFuture<Integer> future3 = future2.thenApplyAsync(result -> {
// 任務3的計算邏輯,依賴于任務2的結果
return result * 2;
});
future3.thenAccept(result -> {
System.out.println("任務3的結果: " + result);
}).exceptionally(e -> {
e.printStackTrace();
return null;
});
}
}
在這個示例中,我們使用 thenApplyAsync()
方法來鏈式地執行任務,并通過 thenAccept()
方法處理任務的結果。exceptionally()
方法用于處理任務執行過程中可能出現的異常。