我正在使用 Jetty HTTP Client 异步进行大约 50 个 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 的单线程解决方案。