Java 在多个ListenableFutures返回后继续执行
我有一个应用程序,它接受用户命令来执行数据库查找。我解析命令/参数,然后迭代每个命令/参数,调用一个处理程序,该处理程序接受该值并构建一个查询条件 然而,到目前为止,这个过程是完全同步的。每个处理程序将执行并添加条件,循环完成后,我可以执行查询 现在,其中一个处理程序必须联系远程服务器来转换一些数据,这意味着它将返回一个Java 在多个ListenableFutures返回后继续执行,java,guava,Java,Guava,我有一个应用程序,它接受用户命令来执行数据库查找。我解析命令/参数,然后迭代每个命令/参数,调用一个处理程序,该处理程序接受该值并构建一个查询条件 然而,到目前为止,这个过程是完全同步的。每个处理程序将执行并添加条件,循环完成后,我可以执行查询 现在,其中一个处理程序必须联系远程服务器来转换一些数据,这意味着它将返回一个ListenableFuture ListenableFuture<Profile> profile = getProfile("someUserName"); p
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 profile=getProfile(“someUserName”);
profile.addListener(新的Runnable(){
@凌驾
公开募捐{
试一试{
query.addCondition(Condition.of(“user.id”、MatchRule.EQUALS、profile.get().getUniqueId());
}捕获(中断异常|执行异常e){
//处理
}
}
},MoreExecutors.sameThreadExecutor());
我正在尝试确定最佳方法,以确保在该ListenableFuture
完成之前不执行查询。让我困惑的部分原因是,我需要假设可能有多个未决请求
例如,如果有人输入p=user1、user2,我们需要发出两个请求,因此将有两个ListenableFuture
s挂起
只有在两者都完成后,我才能执行最终查询
我如何才能做到这一点?允许您获取一组ListenableFuture
,然后取出一个ListenableFuture
,当其所有输入完成并返回结果列表时完成。这听起来像是你需要的