0
我有一個接受用戶命令來執行數據庫查找的應用程序。我解析命令/參數,然後迭代每一個,調用一個處理程序,它接受值並構建查詢條件。多個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>
待定。
只有一次都已完成,我可以執行最後的查詢。
我該怎麼做?