System.currenTimeInMillis()与System.nanoTime()
问题内容:
我知道这System.nanoTime()
是现在测量时间的首选方法System.currentTimeInMillis()
。第一个明显的原因是nanoTime()提供了更精确的时序,另一个原因是我读到后者受系统实时时钟调整的影响。“受到系统实时时钟的影响”是什么意思?
问题答案:
在这种情况下,我发现以下博客摘录很有用:
如果您对 测量绝对时间 感兴趣,请始终使用
System.currentTimeMillis()
。请注意,它的分辨率可能非常粗糙(尽管在绝对时期这很少有问题。)如果您对 测量/计算经过时间
感兴趣,请始终使用System.nanoTime()
。在大多数系统上,它将给出微秒级的分辨率。但是请注意,在某些平台上执行此调用也可能需要几微秒的时间。
由于System.currentTimeMillis()
依赖于系统 的日 时钟,因此调整时间是合理的,以使其保持准时。
这里的调整意味着什么?以CLOCK_REALTIME
Linux 的描述为例:
系统范围的时钟,用于测量实际(即挂钟)时间。设置此时钟需要适当的特权。此时钟 受系统时间的不连续跳跃 (例如,
如果系统管理员手动更改时钟 )以及adjtime(3)和NTP执行的增量调整的影响。