要监控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()
方法检查任务的状态。