温馨提示×

如何监控JavaFutureTask的执行状态

小樊
81
2024-11-19 13:47:45
栏目: 编程语言

要监控JavaFutureTask的执行状态,您可以使用以下方法:

  1. 使用isDone()方法检查任务是否完成。
  2. 使用isCancelled()方法检查任务是否被取消。
  3. 使用getException()方法获取任务执行过程中抛出的异常(如果任务未完成)。
  4. 使用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()方法检查任务的状态。

0