- 如何获取方法的执行时间?
- 是否有一个
Timer
实用程序类来计算任务所需的时间等?
大多数在Google上搜索的结果都是关于调度线程和任务的定时器,这不是我想要的。
Timer
实用程序类来计算任务所需的时间等?大多数在Google上搜索的结果都是关于调度线程和任务的定时器,这不是我想要的。
这里有许多有效的答案,所有这些答案都是在方法中实现的。为了制作一个通用的计时方法,我通常拥有一个名为Timing
的类,该类包含以下内容。
public record TimedResult<T>(T result, Duration duration) {}
public static Duration time(Runnable r) {
var s = Instant.now();
r.run();
var dur = Duration.between(s, Instant.now());
return dur;
}
public static <T> TimedResult<T> time(Callable<T> r) throws Exception {
var s = Instant.now();
T res = r.call();
var dur = Duration.between(s, Instant.now());
return new TimedResult<>(res, dur);
}
Duration result = Timing.time(() -> {
// do some work.
});
TimedResult<String> result = Timing.time(() -> {
// do some work.
return "answer";
});
Duration timeTaken = result.duration();
String answer = result.result();
纯Java SE代码,无需添加依赖项,使用TimeTracedExecuter
:
public static void main(String[] args) {
Integer square = new TimeTracedExecutor<>(Main::calculateSquare)
.executeWithInput("calculate square of num",5,logger);
}
public static int calculateSquare(int num){
return num*num;
}
将会产生如下结果:
信息:计算数字的平方花费了3毫秒
自定义可重用类:TimeTracedExecutor
import java.text.NumberFormat;
import java.time.Duration;
import java.time.Instant;
import java.util.function.Function;
import java.util.logging.Logger;
public class TimeTracedExecutor<T,R> {
Function<T,R> methodToExecute;
public TimeTracedExecutor(Function<T, R> methodToExecute) {
this.methodToExecute = methodToExecute;
}
public R executeWithInput(String taskDescription, T t, Logger logger){
Instant start = Instant.now();
R r= methodToExecute.apply(t);
Instant finish = Instant.now();
String format = "It took %s milliseconds to "+taskDescription;
String elapsedTime = NumberFormat.getNumberInstance().format(Duration.between(start, finish).toMillis());
logger.info(String.format(format, elapsedTime));
return r;
}
}
Instant
类:https://dev59.com/InVC5IYBdhLWcg3wz0h9#30975902 - akhil_mittal