为什么我所有的时间currenttimeMillis()都一样?

时间:2014-04-18 02:50:54

标签: java time

所以我开始使用System.currentTimeMillis();我试图测试我的两个方法之间的结果。我决定放弃我的方法,这样它的作用就不会妨碍我。基本上我没有看到任何时间的变化。我有这样的事情:

double start= System.currentTimeMillis();
double end=System.currentTimeMillis();

 public void displayMethod()
 {

     System.out.println("The start time is" + start);
     for (ITERATIONS AND STUFF)
     {
        System.out.format(STUFF BEING PRINTED);
    }   
    System.out.println("The end time is" + end);
    double difference = start-end;
    System.out.println("The difference " + difference);
 }

我的想法是,我有一个开始时间,即每次打印声明和结束时间之间的时间。然后减去它以显示差异。但是没有区别,所有时间都是一样的。为什么会这样?

我正在考虑使用纳米时代,但我真的不知道如何使用纳米时代,而且我听说它会影响性能。

任何人都可以告诉我为什么我的时间是相同的并建议一种方法 修复它或给我一个合适的替代路线得到 回答?

3 个答案:

答案 0 :(得分:5)

您在开头的所有时间都使用以下几行:

double thetime= System.currentTimeMillis();
double start= System.currentTimeMillis();
double end=System.currentTimeMillis();

你得到的时间相同,因为这些线路是背靠背地执行的(快速呼叫很可能在不到1ms的时间内发生)

将代码调整为:

 public void displayMethod()
 {
     long start= System.currentTimeMillis();
     System.out.println("The start time is" + start);
     for (ITERATIONS AND STUFF)
     {
        System.out.format(STUFF BEING PRINTED);
        System.out.println(System.currentTimeMillis());
    }   

    long end=System.currentTimeMillis();
    System.out.println("The end time is" + end);
    double difference = end-start;
    System.out.println("The difference " + difference);
 }

注意如何将变量的声明移动到需要它们的位置。重要的是要注意变量赋值在声明时发生而不是在使用时,因此将System.currentTimeMillis()的调用移动到您想要的位置非常重要捕捉当前时间。

旁注:我将变量调整为long而不是double,因为System.currentTimeMillis()返回long并且没有理由double在这里。

答案 1 :(得分:2)

你一开始就得到了所有的时间。您需要在想要知道时间的地方调用System.currentTimeMillis()。

答案 2 :(得分:0)

你应该调用currentTimeMillis减去开始时间,你想在那里找到总运行时间。