いくつかのオプションがあります。あなたが今あなたの要求をしたのと同じスレッドからdoStuff
というコードを呼び出しました。両方のリクエストが完了するまでブロックする場合は、CountDownLatchを使用できます。ような何か:
CountDownLatch responseWaiter = new CountDownLatch(2);
Future <HttpResponse<JsonNode>> future1 = Unirest.get("https://example.com/api").asJsonAsync(new Callback<JsonNode>() {
public void completed(HttpResponse<JsonNode> response) {
responses.put(response);
responseWaiter.countDown();
}
...
});
// Similar code for the other get call
...
responseWaiter.await();
doStuff(responses);
あなたは両方の呼び出しが完了するまで、そのスレッドをブロックしたくない場合、あなたはあなたの匿名インナーコールバッククラスの各のAtomicIntegerをインクリメントする可能性があります。カウントが2の場合は、doStuff
とします。何かのように:
AtomicInteger numCompleted = new AtomicInteger();
Future <HttpResponse<JsonNode>> future1 = Unirest.get("https://example.com/api").asJsonAsync(new Callback<JsonNode>() {
public void completed(HttpResponse<JsonNode> response) {
responses.put(response);
int numDone = numCompleted.incrementAndGet();
if (numDone == 2) {
doStuff(responses);
}
}
});
「ExecutorCompletionService」を見たいと思うかもしれませんが、応答があれば何かをすることができます。 – Gray
http://stackoverflow.com/questions/3269445/executorservice-how-to-wait-for-all-tasks-to-finish – goat