任何人都可以向我指出一些文档,明确表示超时为0的'Future.get`不会等待吗?
API文档for 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);
Run Code Online (Sandbox Code Playgroud)
但我很担心未来实现这是一个无限的等待,所以相反,我已经按照我希望它的工作方式明确编码:
long timeout = Math.max(until - now, 0);
if(timeout > 0 || future.isDone()){
return future.get(timeout, TimeUnit.MILLISECONDS);
} else {
throw TimeoutException();
}
Run Code Online (Sandbox Code Playgroud)