3.jpg

微信公众号:爱问CTO
专业编程问答社区
www.askcto.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()会比较合适。

微信公众号:爱问CTO
wechat1.jpg


爱问CTO
18 声望2 粉丝

爱问CTO 专业编程问答网站