https://docs.oracle.com/javase/6/docs/api/java/lang/System.html#currentTimeMillis() says:
返回当前时间(以毫秒为单位)。请注意,虽然返回值的时间单位是毫秒,但该值的粒度取决于底层操作系统,并且可能会更大。例如,许多操作系统以数十毫秒为单位测量时间。
我不清楚是否能保证此代码将始终打印不断增加(或相同)的数字。
while (1) {
System.out.println(System.currentTimeMillis() );
}
最简洁的答案是不,System.currentTimeMillis()
is not单调的。它基于系统时间,因此在时钟调整的情况下(例如通过NTP).
System.nanoTime()
是单调的,当且仅当底层平台支持CLOCK_MONOTONIC
-- 参见评论Java 错误报告 6458294对于某些情况下这是/不正确的情况进行良好的撰写。
(而且,作为一个额外的轶事,我亲自观察过(几次)System.currentTimeMillis()
在没有时钟调整的情况下,跨线程“向后”运行——也就是说,在一个线程中调用该方法返回的值低于在另一个线程中调用的值,即使它按时间顺序发生在“实时”之后')
如果您需要单调源,System.nanoTime()
在支持单调性的平台上是您的最佳选择。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)