java - 在 FutureCallback 中启动 ListenableFuture 并在所有完成后回调

标签 java guava

我正在尝试为 ListenableFutures 提供嵌套的回调层,如下所示:

ListeningExecutorService service = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(10));

ListenableFuture<A> futureA = service.submit(() -> a.doSomething());

Futures.addCallback(futureA, new FutureCallback<A>() {
    @Override
    public void onSuccess(A result) {
         ListenableFuture<B> futureB = service.submit(() -> b.doSomething(result)
    }
});

futureAfutureB 都完成时,如何添加回调?

这是一个简单的示例,但我正在寻找一个可能具有多层 ListenableFuture 的解决方案。

最佳答案

使用 allAsList 创建新的 future 可能是一种选择。 (我假设您不介意同时启动 ab。)

//No idea how A and B are related, so I assume Object
ListenableFuture<List<? extends Object>> futureAB = Futures.allAsList(futureA, futureB);
Futures.addCallback(futureAB, ...);

更新后:

ListeningExecutorService service = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(10));

ListenableFuture<A> futureA = service.submit(() -> a.doSomething());

Futures.addCallback(futureA, new FutureCallback<A>() {
    @Override
    public void onSuccess(final A result) {
         ListenableFuture<B> futureB = service.submit(() -> b.doSomething(result);
         Futures.addCallback(futureB, new FutureCallback<B>() {
              ©Override
              public void onSuccess(final B resultB) {
                  //Do something with result and resultB.
              }
         });
    }
});

关于java - 在 FutureCallback 中启动 ListenableFuture 并在所有完成后回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27546781/

相关文章:

java - @CustomFormAuthenticationMechanismDefinition 注释缺失

java - 加入mapreduce

java - Spring Boot Configuration 类无法在运行时连接 ConfigurationProperties

java - 在 Spring XML 中声明整数、 double 、 float 、字符串等

java - CSVReader 不检查整个文件

java - 我可以装饰 Guava 的 Joiner 类吗

java - 使用 Guava、GWT 和 AppEngine 的项目

java - ArrayListMultimap 和 ArrayList 哪个性能好?

java - com.google.common.collect.Iterables 和实例类型

java - 对数据进行排序的最佳方式: DB Query or in Application Code