有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java未来:获取每个请求的时间

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

每个请求需要500-2500毫秒的时间。在Java中是否有一种方法可以获得每个未来完成请求所需的时间


共 (1) 个答案

  1. # 1 楼答案

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