任何人都可以指出一些文档,这些文档清楚地表明超时为0的'Future.get`不会等待吗?

java.util.concurrent.Future的API文档未明确future.get(0, unit)的行为。单独声明“最多在给定的时间等待...”表示该调用根本不会等待,但是鉴于Object.wait(0)的长期行为(无限等待),我不敢依赖关于future.get(0, unit)的“不等待”行为

扫描一些JDK提供的类的源(即FutureTask),我发现当超时为0时,Future的这种特定实现不会等待。

我想说 通用标签

但是我对Future会无限期地实现这一点感到不安,因此,我以我希望它能正常工作的方式明确地对其进行了编码: 通用标签

有帮助吗?

解决方案

最多在给定的时间等待...

最多等待 零时间单位根本没有等待。这不是隐含的暗示,而是明确的保证。

其他提示

任何人都可以指出一些文档,这些文档清楚地表明超时为0的'Future.get`不会等待吗?

如果有帮助,我可以为您指出一些代码。仔细研究java.util.concurrent.FutureTask,然后再看AbstractQueuedSynchronizer,我看到了下面的循环,我将其简化以显示相关的位: 通用标签

这意味着如果nanosTimeout为0(如果您输入0来获取),它将尝试获取一次未来,然后超时并返回false。

如果感觉更好,可以将超时设置为1纳秒。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top