2016-01-13 105 views
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>待定。

只有一次已完成,我可以執行最後的查詢。

我該怎麼做?

回答

2

Futures.allAsList讓你拿出一堆ListenableFutures,並得到一個ListenableFuture,當所有的輸入完成並返回結果列表完成。這聽起來像你所需要的。