Я не знаю никаких встроенных методов в будущем 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
}
});
}
Если вы хотите ждать всех потоков для завершения, а затем продолжить, вы можете использовать [CountDownLatch] (https://docs.oracle.com/javase/8/ документы/API/Java/Util/параллельный/CountDownLatch.html). – FMiscia