Java future : get the time per request

标签 java time future latency

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

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

最佳答案

我不知道 Future api 本身有任何内置方法。但是,如果您使用 ListenableFutures ,您可以在创建 future 时启动计时器,并在 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
}
});
}

关于Java future : get the time per request,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42121905/

相关文章:

java - 在 Java 中多线程处理这个网络代码?

javascript - JavaScript 从哪里得到一个新的 Date()

Java-使用 invokeAll 按顺序获取 future 结果,但仅适用于某些线程

java - Android PixelXorXfermode 已弃用

java - 内部调用另一个 dll 的 JNI DLL 的依赖项

java - 哪个进入堆栈或堆?

Python : Comparing two times, 并在几分钟内返回

c - 由单独的本地时间调用的两个 struct tm info 返回相同的值

clojure - 为什么动态绑定(bind)会影响 future 的 body ?

java - ExecutorService Future::变得非常慢