为了账号安全,请及时绑定邮箱和手机立即绑定

System.currentTimeMillis对System.NanTime

System.currentTimeMillis对System.NanTime

智慧大石 2019-06-10 16:19:35
System.currentTimeMillis对System.NanTime准确性VS。精密度我想知道的是我是否应该用System.currentTimeMillis()或System.NanTime()当更新我的目标在我的游戏中的位置?它们的运动变化与上次调用以来的时间成正比,我希望尽可能精确。我读到过不同操作系统之间存在一些严重的时间分辨率问题(即Mac/Linux有将近1ms的分辨率,而Windows有50 ms的分辨率?)。我主要是在Windows上运行我的应用程序,而50 ms的分辨率看起来非常不准确。有比我列出的两个更好的选择吗?有什么建议/意见吗?
查看完整描述

3 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

如果你只是在寻找非常精确的测量耗用时间,使用System.nanoTime()System.currentTimeMillis()将给出自那个时代以来最精确的经过时间(以毫秒为单位),但是System.nanoTime()给你一个纳秒精确的时间,相对于某个任意点。

来自Java文档:

public static long nanoTime()

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

这种方法只能用于测量经过的时间,而与系统或挂钟时间的任何其他概念无关。返回的值表示某个固定但任意时间的纳秒(可能在将来,因此值可能为负值)。这种方法提供纳秒精度,但不一定是纳秒精度。没有保证价值观变化的频率。持续时间超过292年的连续呼叫的差异(263由于数值溢出,无法精确计算经过的时间。

例如,要度量某些代码执行所需的时间:

long startTime = System.nanoTime();    // ... the code being measured ...    long estimatedTime = System.nanoTime() - startTime;

另见:JavaDoc System.NanTime()JavaDoc System.currentTimeMillis()想了解更多信息。


查看完整回答
反对 回复 2019-06-10
?
冉冉说

TA贡献1877条经验 获得超1个赞

因为没有其他人提到这个…

的结果比较是不安全的。System.nanoTime()不同线程之间的调用。即使线程的事件以可预测的顺序发生,以纳秒为单位的差异也可以是正的或负的。

System.currentTimeMillis()在线程之间使用是安全的。


查看完整回答
反对 回复 2019-06-10
  • 3 回答
  • 0 关注
  • 484 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信