多个ListenableFutures返回后继续执行

问题描述:

我有一个接受用户命令来执行数据库查找的应用程序。我解析命令/参数,然后迭代每一个,调用一个处理程序,它接受值并构建查询条件。多个ListenableFutures返回后继续执行

但是,直到现在,这个过程完全是同步的。每个处理程序都会执行并添加条件,循环完成后我可以执行查询。

现在,其中一个处理程序必须联系远程服务器才能转换某些数据,这意味着它将返回ListenableFuture

ListenableFuture<Profile> profile = getProfile("someUserName"); 

profile.addListener(new Runnable() { 
    @Override 
    public void run() { 
     try { 
      query.addCondition(Condition.of("user.$id", MatchRule.EQUALS, profile.get().getUniqueId())); 
     } catch (InterruptedException | ExecutionException e) { 
      // handle 
     } 
    } 
}, MoreExecutors.sameThreadExecutor()); 

我想,以确定最佳的方式,以确保直到ListenableFuture已经完成,我不执行我的查询。让我困惑的部分原因是我需要假设可能有多个待处理的请求。

例如,如果有人输入p=user1,user2,我们需要提出两个请求,所以会有两个ListenableFuture<Profile>待定。

只有一次已完成,我可以执行最后的查询。

我该怎么做?

Futures.allAsList让你拿出一堆ListenableFutures,并得到一个ListenableFuture,当所有的输入完成并返回结果列表完成。这听起来像你所需要的。