此代码在单独的线程中运行一些非常便宜的(就时间而言)方法,因此可以确保以99.9999%的确定性确保外部方法将成功返回。如果完成工作所花费的时间超过5秒,我还是希望终止执行。那么,下面的代码是否需要在if (future.isDone()) ...
中进行换行,或者在我的情况下我可以保留原样?
final Future<SubE> futureEffect = threadPool.submit(effectCallable(lhs, rhs));
try {
return futureEffect.get(5, TimeUnit.SECONDS);
} catch (InterruptedException | TimeoutException e) {
throw new eRuleLoadingFailed(e.getMessage());
} catch (ExecutionException e) {
if (e.getCause() instanceof eAccessDenied) {
throw (eAccessDenied)e.getCause();
} else {
throw new eRuleLoadingFailed(e.getMessage());
}
}
最佳答案
您在这里不需要isDone
。实际上,它会破坏您的代码。在极少数情况下,执行的代码在主线程到达if
之后完成一微秒的时间时,isDone
将返回false
,而get
根本不会被执行。我认为这不是您想要的。您想在所有情况下都执行get
。