3.2 如何选择System.currentTimeMillis和System.nanoTime?| Java Debug 笔记

本文正在参加「Java主题月 – Java Debug笔记活动」,详情查看<活动链接>

提问:Java中如何选择System.currentTimeMillis和System.nanoTime?

我想知道的是在更新对象在游戏中的位置时应该使用System.currentTimeMillis()还是System.nanoTime()?它们的数据变化都与自上次调用该函数以来经过的时间成正比,不过我想尽可能精确。

我了解到,不同的操作系统之间存在一些严重的时间分辨率问题(即Mac / Linux的分辨率几乎为1毫秒,而Windows的分辨率为50毫秒?)。我主要是在Windows上运行我的应用,而50ms的分辨率似乎非常不准确。

是否有比我列出的两个更好的选择?

有什么建议或者意见吗?

经过时间:返回的时间基本格式都是一个long类型数据,这代表从起始时间点开始到至今经过的时间

回答1:

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

Java文档进行了如下描述:

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

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

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享