Java中的时间跟踪:使用currentTimeMills()

ask*_*der 7 java time

我今天遇到了一个有趣的"时间旅行"问题,使用以下代码:

for (int i = 0; i < 1; i++){
    long start = System.currentTimeMillis();
    // Some code here
    System.out.print(i + "\t" + (System.currentTimeMillis() - start));
    start = System.currentTimeMillis();
    // Some code here
    System.out.println("\t" + (System.currentTimeMillis() - start));
}
Run Code Online (Sandbox Code Playgroud)

我得到了结果

0   15  -606
Run Code Online (Sandbox Code Playgroud)

它似乎不可重复.任何人都有关于在运行时间内发生的事情的任何线索?只是好奇...

新编辑:我使用了一个小测试来确认下面的答案.我运行程序并在运行期间更改系统时间,最后重复"时间旅行":

0   -3563323    163
Run Code Online (Sandbox Code Playgroud)

案件结案.多谢你们!

更多的话:currentTimeMillis()和nanoTime()都是基于系统定时器的,所以如果更新系统定时器(具体而言,转回),它们将不是单调的.对于这种情况,最好使用一些基于互联网的计时器.

Rob*_*bin 12

System.currentTimeMillis()取决于系统时间.所以它可以被第三方系统修改.

测量时间是System.nanoTime()更好的选择.