首页 > 解决方案 > Guava 的 ListenableFuture 响应速度如何

问题描述

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

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

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

标签: javaguava

解决方案


这是即时的。

没有单独的线程忙于等待。ListenableFutureGuava 或ListeningExecutorService它提供的所有返回的实例都是子类,并在它们有结果时 AbstractFuture调用。它本身调用了一个名为 的方法,该方法将 上的侦听器提交给与其关联的.setsetcompleteListenableFutureExecutor

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


推荐阅读