如何处理ExecutorService任务抛出的异常?

Ben*_*sen 3 java multithreading exception

我正在使用 ExecutorService 在系统上运行测试。当测试由于某种原因失败时就会出现问题。这些原因可能有很多,当然我会记录这些错误。

但我想实时通知用户错误。因此,当错误发生时,到达顶部的时间越长,它就变成TestFailedException带有消息和原因的错误。我想捕获这个异常并通知用户,但我似乎无法做到这一点。

这是实际启动运行测试的线程的方法示例:

public void asyncRunTestfixture(Concretetest concretetest) {

    ExecutorService executor = Executors.newCachedThreadPool();
    FutureTask<Boolean> futureTask_1 = new FutureTask<Boolean>(new Callable<Boolean>() {
        @Override
        public Boolean call() throws TestFailedException {
            return RunTestInFixture(concretetest);          
        }

      });
      executor.execute(futureTask_1);
      executor.shutdown(); 
}
Run Code Online (Sandbox Code Playgroud)

但即使 call 抛出异常,我也无法在其他地方捕获它,无论是现在还是如果我说 asyncRunTestfixture 方法抛出异常。

我该如何解决这个问题?

Tho*_*ser 5

当任务抛出一些异常时,调用get()已完成通常futureTask_1会抛出一个ExecutionException包装。cause