可调用执行期间的异常

dan*_*nik 5 java concurrency future java-ee

我有以下Callable:

public class Worker implements Callable<Boolean>{

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

      //do Something
     return success;
   }

}
Run Code Online (Sandbox Code Playgroud)

现在我正在执行它:

Worker worker - new Worker();
Future<Boolean> submit = executor.submit(worker);
Run Code Online (Sandbox Code Playgroud)

我正在以一种hashMap的形式存储提交,以便在代码中的某个地方执行某些操作.

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

请问submit.isCancelled(),如果发生假某种异常的,如果一切工作正常返回true?

Vic*_*kin 13

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

  • 它不会返回,它会"抛出"异常. (4认同)

Rom*_*ain 7

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


Gro*_*eek 5

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

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