超时为0时future.get的行为
-
27-10-2019 - |
题
任何人都可以指出一些文档,这些文档清楚地表明超时为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纳秒。
不隶属于 StackOverflow