任何人都可以向我指出一些明确说明超时为 0 的“Future.get”不会等待的文档吗?
API 文档java.util.concurrent.Future
没有明确说明future.get(0, unit)
. 就其本身而言,声明“如果需要,最多等待给定时间......”意味着这个调用根本不会等待,但考虑到(无限等待)的长期行为Object.wait(0)
,我很紧张依赖的“不等待”行为future.get(0, unit)
扫描一些 JDK 提供的类的源代码(即。FutureTask
)我看到这个特定的实现Future
在超时为 0 时不会等待。
我想能够说
long timeout = Math.max(until - now, 0);
return future.get(timeout, TimeUnit.MILLISECONDS);
但是我对 Future 将其实现为无限等待感到紧张,因此,我已经按照我期望它的工作方式明确地对其进行了编码:
long timeout = Math.max(until - now, 0);
if(timeout > 0 || future.isDone()){
return future.get(timeout, TimeUnit.MILLISECONDS);
} else {
throw TimeoutException();
}