首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在JAVA中如何给执行时间计时?

在JAVA中如何给执行时间计时?
EN

Stack Overflow用户
提问于 2018-07-20 07:41:39
回答 2查看 0关注 0票数 0

如何获得方法的执行时间?是否有一个类似Timer utility class来计算任务所需的时间等?

Google上的大多数搜索结果都是用于调度线程和任务的计时器,这不是我想要的结果。

EN

回答 2

Stack Overflow用户

发布于 2018-07-20 15:47:48

使用Java 8,你可以使用每种常规方法执行以下操作:

代码语言:txt
复制
Object returnValue = TimeIt.printTime(() -> methodeWithReturnValue());
//do stuff with your returnValue

当使用TimeIt时:

代码语言:txt
复制
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或其他模式下输出时间。如果你正在使用函数,也可以这样操作:

代码语言:txt
复制
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;
    };
}
票数 0
EN

Stack Overflow用户

发布于 2018-07-20 16:52:41

我这也有一种老套的方法:

代码语言:txt
复制
long startTime = System.nanoTime();
methodToTime();
long endTime = System.nanoTime();

long duration = (endTime - startTime);  //divide by 1000000 to get milliseconds.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100005607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档