1
我使用Jetty HTTP客戶端異步發出約50個HTTP調用。代碼看起來像這樣:在java中等待異步http請求
List<Address> addresses = getAddresses();
final List<String> done = Collections.synchronizedList(new LinkedList<String>());
List<ContentExchange> requests;
for (Address address : addresses) {
ContentExchange ce = new ContentExchange() {
@Override
protected void onResponseComplete() throws IOException {
//handle response
done.add("done");
}
}
ce.setURL(createURL(address));
requests.add(ce);
}
for (ContentExchange ce : requests) {
httpClient.send(ce);
}
while (done.size() != addresses.size()) {
Thread.yield();
}
System.out.println("All addresses processed");
它調用一個休息服務,返回一些關於地址的數據。我期望它做的是這樣的:
- 使50個異步(非阻塞)http調用。
- 該線程將等待所有50個完成。
但是,它不工作。如果我沒有while循環,它工作正常,但我需要等到所有50個完成。有什麼方法可以等到全部50完成?
另外我知道有關ExecutorService和多線程解決方案,但我需要一個單線程解決方案與非阻塞IO。
謝謝,使用CountDownLatch工作 – cpprototypes 2013-05-03 00:37:24