https://docs.oracle.com/javase/6/docs/api/java/lang/System.html#currentTimeMillis()说:
返回当前时间(以毫秒为单位)。请注意,虽然返回值的时间单位是毫秒,但该值的粒度取决于基础操作系统,并且可能更大。例如,许多操作系统以几十毫秒为单位测量时间。
我不确定我是否可以保证此代码将始终打印出不断增加(或相同)的数字。
while (1) { System.out.println(System.currentTimeMillis() ); }
简短的回答是否定的,System.currentTimeMillis()是 不是 单调的。它基于系统时间,因此在时钟调整(例如,通过NTP)的情况下,可能会以任何方式(向前或向后)变化。
System.currentTimeMillis()
System.nanoTime()当且仅当基础平台支持时,它是单调的CLOCK_MONOTONIC- 在某些情况下(不是),请参见Java错误报告6458294上的注释,以获得良好的撰写。
System.nanoTime()
CLOCK_MONOTONIC
(而且,作为一个额外的轶事,我个人观察到(几次)System.currentTimeMillis()在没有时钟调整的情况下跨线程运行“向后”-也就是说,在一个线程中对该方法的调用返回的值比调用低在另一个线程中,即使它是按时间顺序在“实时”之后发生的)
如果需要单调源,则System.nanoTime()在支持单调性的平台上是您的最佳选择。