多个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>
待定。
只有一次都已完成,我可以执行最后的查询。
我该怎么做?