我今天遇到了一个有趣的“时间旅行”问题,使用以下代码:
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));
}
我得到了结果
0 15 -606
似乎它不可重复。任何人都有关于在运行时间内发生的事情的任何线索?好奇......
新编辑:我使用了一个小测试来确认下面的答案。我运行程序并在运行期间更改系统时间,最后重复“时间旅行”:
0 -3563323 163
案件结案。谢谢你们!
更多的话:currentTimeMillis()和nanoTime()都是基于系统定时器的,因此如果更新系统定时器(特别是转回),它们将不是单调的。对于这种情况,最好使用一些基于互联网的计时器。
答案 0 :(得分:12)
System.currentTimeMillis()
取决于系统时间。所以它可以被第三方系统修改。
测量时间System.nanoTime()
是更好的选择。
答案 1 :(得分:0)
我记得一些事情,比如对系统时间进行时间调整,偶尔与实际时间相匹配。因为currentTimeMillis依赖于可能发生的系统时钟。您也正在与时间服务器同步,也可能是。