【问题标题】:Exception during Callable execution可调用执行期间的异常
【发布时间】:2011-12-07 15:31:33
【问题描述】:

我有以下 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?

【问题讨论】:

    标签: java jakarta-ee concurrency future


    【解决方案1】:

    当您调用Future.get() 时,它会抛出包裹在ExecutionException 中的异常。

    【讨论】:

    • 但是 Future.get 会返回布尔值吗?可以发一些代码吗?
    • 不会返回,会throw异常。
    • V call() throws Exception 是 Callable 的原始声明。
    【解决方案2】:

    正如documentation 中所述,Future&lt;V&gt; 将重新抛出在.call() 期间发生的异常(尽管包装在ExecutionException 中),并且isCancelled() 在这种情况下仍然是错误的。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 永远不要浪费空间,除非你的空间非常紧张。
      【解决方案4】:

      submit.get() 将抛出 ExecutionException

      【讨论】:

        猜你喜欢
        • 2019-10-16
        • 2019-10-30
        • 2020-07-04
        • 1970-01-01
        • 2010-10-30
        • 2017-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多