gpt4 book ai didi

java - 直接调用 Future#get(time, timeunit) (不检查 isDone())是一种不好的做法吗?

转载 作者:行者123 更新时间:2023-12-02 05:35:40 25 4
gpt4 key购买 nike

此代码在单独的线程中运行一些非常便宜(就时间而言)的方法,因此可以 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

关于java - 直接调用 Future#get(time, timeunit) (不检查 isDone())是一种不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24996260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com