我有一段代码需要并行发出15个请求,然后在继续之前等待所有请求完成。
每个请求大约需要500到2500毫秒。 Java中有没有办法让每个未来都有时间来完成请求?
答案 0 :(得分:0)
我不了解Future api本身的任何内置方法。但是,如果使用ListenableFutures,则可以在创建未来时启动计时器,并在onSuccess或onFailure回调中停止计时器。具体来说,这可能看起来像:
public void timeRequests(MyRequests[] requestsToMake) {
ListeningExecutorService service = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(requestsToMake.length));
long startTimeNanos = System.nanoTime();
long[] endTimes= new long[requestsToMake.length]
for(int i =0; i < requestsToMake.length; i++){
MyRequest req = requestsToMake[i];
ListenableFuture<MyData> rFuture = service.submit(new Callable<MyRequest>() {
public MyData call() {
return req.makeRequest();
}
});
Futures.addCallback(rFuture, new FutureCallback<MyData>() {
public void onSuccess(MyData data) {
endTimes[i]=System.nanoTime();
//whatever else you do
}
public void onFailure(Throwable thrown) {
endTimes[i]=System.nanoTime();
//whatever else you do
}
});
}