5

我有以下可调用对象:

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

4 回答 4

13

当你调用Future.get()它时,它会抛出你的异常包裹在一个ExecutionException.

于 2011-12-07T15:33:54.193 回答
7

文档中所述,Future<V>将重新抛出期间发生的异常.call()(尽管包装在 an 中ExecutionException),isCancelled()在这种情况下仍然是错误的。

于 2011-12-07T15:34:33.147 回答
5

Guava Librairies中,有一个FutureCallback接口有一个onFailure(Throwable t)你应该感兴趣的方法

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

于 2011-12-07T15:40:53.447 回答
2

submit.get()将抛出ExecutionException

于 2011-12-07T15:38:40.993 回答