可调用执行期间的异常

时间:2011-12-07 15:31:34

标签: java java-ee concurrency future

我有以下Callable:

public class Worker implements Callable<Boolean>{

   @Override
   public Boolean call(){
      boolean success=true;

      //do Something
     return success;
   }

}

现在我正在执行它:

Worker worker - new Worker();
Future<Boolean> submit = executor.submit(worker);

我正在以hashMap的形式存储提交,以便在代码中的某处执行某些操作。

如何知道worker.call()函数中是否发生任何异常?

如果发生某种异常,submit.isCancelled()会返回true,如果一切正常,会返回false吗?

4 个答案:

答案 0 :(得分:13)

当您致电Future.get()时,它会将您的异常包含在ExecutionException

答案 1 :(得分:7)

正如documentation中所述,Future<V>会重新抛出.call()期间发生的异常(虽然包含在ExecutionException中),isCancelled()在这种情况下仍然是假的。

答案 2 :(得分:5)

Guava Librairies中,有一个FutureCallback界面,其中包含onFailure(Throwable t)方法,您应该感兴趣

将Google Guava Librairies添加到项目中绝不浪费空间: - )

答案 3 :(得分:2)

submit.get()将抛出 ExecutionException