java - 有没有办法计算完成每个 completableFuture 所需的时间?

标签 java asynchronous time completable-future

在详细讨论问题之前,我想先介绍一下问题的背景。基本上,我的代码看起来像

for(int i = 0; i < n; i++){
    startTime = System.currentTimeMillis();
    result = doSomething();
    endTime = System.currentTimeMillis();
    responseTime.add(endTime - startTime);
    results.add(result);
} 
print(results and responseTime);

现在我想做的是作为 completableFuture 运行 doSomething() 并获取上面提到的responseTime。但既然这样做是完全不正确的——

for(int i = 0; i < n; i++){
    startTime = System.currentTimeMillis();
    resultCF = CompletableFuture.supplyasync(() -> doSomething());
    endTime = System.currentTimeMillis();
    responseTime.add(endTime - startTime);
    results.add(resultCF); //result is to store the completableFutures
}
CompletableFuture.allOf(results.toArray(new CompletableFuture[results.size()])).join();
print(i.get() for i in results and responseTimes);

因为它会违背获取每个doSomething()执行时间的目的。那么,有什么方法可以获得每个 completableFuture 的响应时间吗?另外,我需要在循环末尾包含 completableFutures(resultCF) 的结果数组列表。

最佳答案

最简单的方法可能是向 resultCF 添加一个阶段,它本身会将响应时间添加到列表中。这部分完成后将完成resultCF:

resultCF = CompletableFuture.supplyasync(() -> doSomething())
              .thenApply(s -> {
                  responseTime.add(System.currentTimeMillis() - startTime);
                  return s;
               });
results.add(resultCF);

关于java - 有没有办法计算完成每个 completableFuture 所需的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67472655/

相关文章:

java - 当行缺少引号时 OpenCSV 无限循环

java - 多个 JFrame

testing - vhdl中的同步/异步d型触发器

java - 来自不同服务器的 java.sql.Time 生成的不同输出

java - jparepository 未在服务中自动连接

java - 同一 Activity 中的两个 DatePicker - Android

javascript - 更复杂的延迟/ promise 使用和链只是不点击。希望得到一些澄清

ios - 如何在继续 segue 之前等待另一个线程完成?

javascript - 如何限制日期选择器上的日期在特定时间之后?

javascript - 如何计算小时数 (hh :mm:ss) in jquery?