要監控JavaFutureTask
的執行狀態,您可以使用以下方法:
isDone()
方法檢查任務是否完成。isCancelled()
方法檢查任務是否被取消。getException()
方法獲取任務執行過程中拋出的異常(如果任務未完成)。get()
方法獲取任務的結果。請注意,get()
方法會阻塞,直到任務完成。以下是一個簡單的示例:
import java.util.concurrent.*;
public class MonitorJavaFutureTask {
public static void main(String[] args) {
// 創建一個Callable任務
Callable<String> task = () -> {
Thread.sleep(3000); // 模擬耗時操作
return "任務執行結果";
};
// 創建一個FutureTask實例
FutureTask<String> futureTask = new FutureTask<>(task);
// 將FutureTask提交給線程池執行
ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.submit(futureTask);
try {
// 檢查任務是否完成
if (futureTask.isDone()) {
System.out.println("任務已完成");
// 獲取任務結果
String result = futureTask.get();
System.out.println("任務結果: " + result);
} else {
System.out.println("任務尚未完成");
}
// 檢查任務是否被取消
if (futureTask.isCancelled()) {
System.out.println("任務已取消");
}
// 獲取任務執行過程中拋出的異常(如果任務未完成)
try {
futureTask.get();
} catch (ExecutionException e) {
System.out.println("任務執行過程中拋出異常: " + e.getCause());
}
} catch (InterruptedException e) {
System.out.println("主線程被中斷");
} finally {
// 關閉線程池
executorService.shutdown();
}
}
}
在這個示例中,我們創建了一個Callable
任務,然后將其封裝到FutureTask
實例中。接著,我們將FutureTask
提交給線程池執行。在主線程中,我們使用isDone()
、isCancelled()
和getException()
方法檢查任務的狀態。