定时方法持续时间:始终显示零秒?

时间:2016-08-25 09:45:56

标签: java time long-integer apache-commons-lang3

我正在尝试计算方法在我的应用程序中花费多长时间,问题是时间总是显示0秒。我的代码有什么问题?

long currentTimeInMilis = System.currentTimeMillis() % 1000;

    public ClassName() {

        public void timeMethod() {

                long startOfmethod= currentTimeInMilis;

                methodToTime();

                long endOfMethod= currentTimeInMilis;

                long totalTime = endOfMethod= - startOfmethod;

                LOGGER.info("[Method Took: {}", DurationFormatUtils.formatDuration(totalTime, "H:mm:ss", true) + "]\n");                                            
             }
    }

问题是我每次都会得到这个输出,尽管我知道它的耗时超过零秒:

Method took: 0:0:0:

1 个答案:

答案 0 :(得分:4)

您之前和之后使用相同的currentTimeInMilis变量。在此期间,它并不像是神奇地改变它的东西(好吧,除非methodToTime,否则,因为你已经把它变成了一个字段而不是一个局部变量)。在方法完成后,您必须再次再次调用 System.currentTimeMillis(),以便获得一个可以与调用方法之前的值进行比较的值。

例如,完全摆脱currentTimeInMilis字段,并查看下面的***

public ClassName() {

    public void timeMethod() {

        long startOfmethod = System.currentTimeMillis(); // ***

        methodToTime();

        long endOfMethod = System.currentTimeMillis();   // ***

        long totalTime = endOfMethod = -startOfmethod;

        LOGGER.info("[Method Took: {}", DurationFormatUtils.formatDuration(totalTime, "H:mm:ss", true) + "]\n");
    }
}

请注意,我也删除了% 1000;只记住值的毫秒部分是没有意义的。

然而,请注意,这仅适用于非常非常粗略的指示(您已经说过该方法需要两分钟)。有关正确的基准测试,请参阅How do I write a correct micro-benchmark in Java?