【问题标题】:Java Future: get the time per requestJava Future:获取每个请求的时间
【发布时间】:2017-02-09 03:36:12
【问题描述】:

我有一段代码需要并行发出 15 个请求,然后等待所有请求完成后再继续。

每个请求需要 500-2500 毫秒之间的时间。 Java 中有没有办法获取每个未来完成请求所需的时间?

【问题讨论】:

  • 如果要等待所有线程完成后再继续,可以使用CountDownLatch

标签: java time future latency


【解决方案1】:

我不知道 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
}
});
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多