乐趣区

SystemcurrentTimeMillis和SystemnanoTime的比较

微信公众号:51 码农网
专业编程问答社区
www.51manong.com

如果你只是在寻找经过时间的极其精确的度量,请使用 System.nanoTime()。System.currentTimeMillis()将为您提供自该纪元以来最精确的经过时间(以毫秒为单位),但 System.nanoTime()相对于任意点,您可以得到十亿分之一秒的精确时间。

从 Java 文档中:

public static long nanoTime()

返回最精确的可用系统计时器的当前值(以纳秒为单位)。

此方法只能用于测量经过时间,并且与系统或挂钟时间的任何其他概念无关。返回的值表示自某个固定但任意的原始时间以来的纳秒(也许是将来的时间,因此值可能为负)。此方法提供纳秒精度,但不一定提供纳秒级的分辨率(即值更改的频率)。不能保证值更改的频率。由于数值溢出,跨越大约 292 年(2 的 63 次方纳秒)的连续呼叫中的差异将无法准确计算经过的时间。

总结一下:
1.System.nanoTime()的精确度更高一些,如今的硬件设备性能越来越好,如果要更精密计算执行某行代码或者某块代码所消耗的时间,该方法会测量得更精确。

2. 单独获取 System.nanoTime()没有什么意义,因为该值是随机的,无法表示当前的时间。如果要记录当前时间点,用 System.currentTimeMills()。

3.System.currentTimeMills()得到的值能够和 Date 类方便地转换,jdk 提供了多个接口来实现;但是 System.nanoTime()则不行。

4.System.currentTimeMills()的值是基于系统时间的,可以人为地进行修改;而 System.nanoTime()则不能,如果需要根据时间差来过滤某些频繁的操作,用 System.nanoTime()会比较合适。

微信公众号:51 码农网

退出移动版