我正在使用 servlet(版本 7)测试用 Java EE 编写的 Web 应用程序。我正在向我的 servlet 发送大量 HTTP 请求,我想知道所有请求何时完成。
要发送请求,我正在使用执行程序。另外我不知道这是否是最有效的方法。
for (int i=0; i < numRequests; i++) {
ExecutorService executor = Executors.newFixedThreadPool(1);
Future<util.Response> responseFromServlet = null;
responseFromServlet = executor.submit(new util.Request(new URL(url)));
if ( i != numRequests -1 ) {
executor.shutdown();
} else {
responseFromServlet.get().getBody(); // suspensive call for last invocation
executor.shutdown();
}
}
实际上,执行器等待最后一个调用的 HTTP 请求的结束,但它通常不是最后一个完成的。
我认为创建一个等待每个 HTTP servlet 响应的新线程是疯狂的。我无法生成 100-200-300 个线程,每个请求一个!
那么有没有办法了解所有 servlet 何时结束执行?如果需要,我可以修改我的 servlet。
=== 编辑 ===
更准确地说,这里是 Request 类的实现:
public class Request implements Callable<Response> {
private URL url;
public Request(URL url) {
this.url = url;
}
@Override
public Response call() throws Exception {
return new Response(url.openStream());
}
}
这就是 Response 类:
public class Response {
private InputStream body;
public Response(InputStream body) {
this.body = body;
}
public InputStream getBody() {
return body;
}
}