简短的回答是否定的,System.currentTimeMillis()
是 不是 单调的。它基于系统时间,因此在时钟调整(例如,通过NTP)的情况下,可能会以任何方式(向前或向后)变化。
System.nanoTime()
当且仅当基础平台支持时,它是单调的CLOCK_MONOTONIC
- 在某些情况下(不是),请参见Java错误报告6458294上的注释,以获得良好的撰写。
(而且,作为一个额外的轶事,我个人观察到(几次)System.currentTimeMillis()
在没有时钟调整的情况下跨线程运行“向后”-也就是说,在一个线程中对该方法的调用返回的值比调用低在另一个线程中,即使它是按时间顺序在“实时”之后发生的)