如何获得方法的执行时间?是否有一个类似Timer utility class来计算任务所需的时间等?
Google上的大多数搜索结果都是用于调度线程和任务的计时器,这不是我想要的结果。
发布于 2018-07-20 15:47:48
使用Java 8,你可以使用每种常规方法执行以下操作:
Object returnValue = TimeIt.printTime(() -> methodeWithReturnValue());
//do stuff with your returnValue
当使用TimeIt时:
public class TimeIt {
public static <T> T printTime(Callable<T> task) {
T call = null;
try {
long startTime = System.currentTimeMillis();
call = task.call();
System.out.print((System.currentTimeMillis() - startTime) / 1000d + "s");
} catch (Exception e) {
//...
}
return call;
}
}
学会了这种方法,你就可以在代码中的任何地方测量时间,也不会破坏代码整体性。在这个简单的例子中,我只输出了时间。你可以为TimeIt添加一个开关,例如在DebugMode或其他模式下输出时间。如果你正在使用函数,也可以这样操作:
Function<Integer, Integer> yourFunction= (n) -> {
return IntStream.range(0, n).reduce(0, (a, b) -> a + b);
};
Integer returnValue = TimeIt.printTime2(yourFunction).apply(10000);
//do stuff with your returnValue
public static <T, R> Function<T, R> printTime2(Function<T, R> task) {
return (t) -> {
long startTime = System.currentTimeMillis();
R apply = task.apply(t);
System.out.print((System.currentTimeMillis() - startTime) / 1000d
+ "s");
return apply;
};
}
发布于 2018-07-20 16:52:41
我这也有一种老套的方法:
long startTime = System.nanoTime();
methodToTime();
long endTime = System.nanoTime();
long duration = (endTime - startTime); //divide by 1000000 to get milliseconds.
https://stackoverflow.com/questions/-100005607
复制相似问题