Guava 的 ListenableFuture 的响应能力如何

How responsive is Guava's ListenableFuture

ListenableFuture如何检查结果是否就绪,以便立即或尽可能快地执行已注册的侦听器?

ListenableFuture 是否通过调用 isDone() 忙于等待(我认为这是一个愚蠢的解决方案)?或者它是否有内部任务来定期调用 get(long timeout, TimeUnit unit) 并使用一些微调的超时值?如果它定期唤醒以调用 get(long timeout, TimeUnit unit),是否有一个参数供用户调整此行为,因为我希望我的侦听器在结果可用时立即执行。

任何文档或源代码参考将不胜感激,以进一步理解这一点。

即刻。

没有单独的线程忙等待。 Guava 返回的所有 ListenableFuture 实例或其提供的 ListeningExecutorService 都是 AbstractFuture 的子类并调用 set when they have a result. set itself calls a method called complete,它将 ListenableFuture 上的侦听器提交给它们关联 Executor.

也就是说,不能保证附加到侦听器的 Executor 会立即 运行 侦听器作业。这取决于您确定,或者如果您希望它同步 运行 并且您的侦听器速度很快并且您可以阻止它,您可以使用 MoreExecutors.directExecutor().