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

时间:2016-05-23 06:02:11

标签: java multithreading exception-handling

我使用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(); 
}

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

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

在完成的get()上调用futureTask_1会在任务抛出异常时抛出ExecutionException,通常包裹cause