我有一个应用程序,它接受用户命令来执行数据库查找。我解析命令/参数,然后迭代每一个,调用一个处理程序,它接受值并构建一个查询条件。
然而,到目前为止,这个过程完全同步。每个处理程序都会执行并添加条件,在循环完成后我可以执行查询。
现在,其中一个处理程序必须联系远程服务器以转换某些数据,这意味着它返回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>
未决。
只有两个完成后,才能执行最终查询。
我该怎么做?
答案 0 :(得分:3)
Futures.allAsList
可以让你获得一堆ListenableFutures
并获得一个ListenableFuture
,当所有输入完成并完成后返回结果列表。这听起来像你需要的。