我有一个方法(可以由不同的线程同时调用)创建一个异步任务并返回一个CompletableFuture. 我想通过将任务与 whenComplete(...) 链接来测量运行任务所需的时间,如下所示:
public CompletableFuture<Result> createTask(...) {
CompletableFuture<Result> result = ...;
final long startTime = System.currentTimeMillis();
result.whenComplete((res, err) -> {
System.out.println(System.currentTimeMillis() - startTime);
}
}
Run Code Online (Sandbox Code Playgroud)
我传入的 lambda 将异步执行,我编写的方法也将是多线程的。这个 lambda 能够打印出准确的时间吗?当 lambda 被不同的线程异步执行时,Java 如何处理变量范围?