要监控JavaFutureTask
的执行状态,您可以使用以下方法:
- 使用
isDone()
方法检查任务是否完成。 - 使用
isCancelled()
方法检查任务是否被取消。 - 使用
getException()
方法获取任务执行过程中抛出的异常(如果任务未完成)。 - 使用
get()
方法获取任务的结果。请注意,get()
方法会阻塞,直到任务完成。
以下是一个简单的示例:
import java.util.concurrent.*; public class MonitorJavaFutureTask { public static void main(String[] args) { // 创建一个Callable任务 Callabletask = () -> { Thread.sleep(3000); // 模拟耗时操作 return "任务执行结果"; }; // 创建一个FutureTask实例 FutureTask 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()
方法检查任务的状态。