未来行为.get with 0 timeout
2022-09-03 02:03:53
任何人都可以向我指出一些文档,这些文档清楚地表明超时值为0的“Future.get”不会等待?
的 API 文档未明确说明 的行为。独立存在,语句“如有必要,则最多等待给定时间......”这意味着这种调用根本不会等待,但考虑到(无限等待)的长期行为,我很紧张地依赖于“无等待”的行为java.util.concurrent.Future
future.get(0, unit)
Object.wait(0)
future.get(0, unit)
扫描某些 JDK 提供的类的源代码(即 )我看到这个特定的实现在超时值为0时不会等待。FutureTask
Future
我想可以说
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();
}