我有以下代码:
Future<Integer> future = Executor.execute(callable);
Integer i;
try {
i = future.get();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return MESSAGE_INT_CODE;
} catch (ExecutionException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
}
return i;
,其中ExecutionException
可以包含其他异常,例如ABCException
。我的调用代码正在捕获ABCException
,这是运行时异常,所以如果发生ExecutionException
,我怎么知道这是因为ABCException
?ExecutionException
由于一些异常,当我的public call()
方法运行。和调用方法可能有一些ABCException
我应该这样写吗?
catch (ExecutionException e) {
throw new ABCException(e.getMessage());
// TODO Auto-generated catch block
//e.printStackTrace();
}
try e.getCause() instanceof ABCException
如果在call()方法执行期间发生异常,ExecutorService捕获它并将其放入ExecutionException中。当你调用future.get();future抛出ExecutionException,其中包含来自调用方法的异常。如果我理解正确的话,你的代码可能是这样的:
try {
future.get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
Throwable cause = e.getCause();
if(cause instanceof ABCException) {
// cast throwable to ABCException and rethrow it
throw (ABCxception) cause;
}else {
// do something else
}
}