如何将java Future <v>转换为guava ListenableFuture <v>

时间:2015-05-11 03:29:24

标签: java concurrency guava futuretask

我需要找到一种从Future转换为ListenableFuture的方法。 目前我正在使用一个返回Future的服务,但我需要连接一个监听器。 我无法更改服务界面,因为它不属于我。

有一种简单的方法吗?

我已经阅读了番石榴文档,但我仍然找不到办法。

1 个答案:

答案 0 :(得分:17)

Guava为此转换提供JdkFutureAdapters类型。 API

  

使用提供普通文件的库所需的实用程序   未来的实例。

例如

Future<?> future = ...;
ListenableFuture<?> listenable = JdkFutureAdapters.listenInPoolThread(future);

但是你应该小心使用它:当 已经 提交任务时很难模仿可听的未来,因为没有办法放一个挂钩完成那里,所以Guava采用一个新的线程并阻塞,直到原始Future完成。

番石榴维基也contains some information on this specific case