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