这个问题无意攻击System.nanoTime()
. 我意识到正确使用这是一种非常棘手的方法。
有哪些方法可以处理System.nanoTime()
在调用之间返回相同的值?示例:多个线程调用System.nanoTime()
并获得相同的值。
在 Windows 上运行测试时,我很惊讶在我的代码库中经常看到这种情况。我们nanoTime
用来对跨多个线程到达的事件进行排序。也许这只是一个 Windows 问题,而 Linux 单调时钟更加精细。
参考:
这个问题无意攻击System.nanoTime()
. 我意识到正确使用这是一种非常棘手的方法。
有哪些方法可以处理System.nanoTime()
在调用之间返回相同的值?示例:多个线程调用System.nanoTime()
并获得相同的值。
在 Windows 上运行测试时,我很惊讶在我的代码库中经常看到这种情况。我们nanoTime
用来对跨多个线程到达的事件进行排序。也许这只是一个 Windows 问题,而 Linux 单调时钟更加精细。
参考:
要解释为什么你得到相同的值,请更仔细地阅读文档:
此方法提供纳秒精度,但不一定提供纳秒分辨率(即值更改的频率) - 不保证分辨率至少与 currentTimeMillis() 的分辨率一样好。
您的计算机可能没有足够的时钟分辨率,因此可能有很多时间nanoTime
会返回相同的数字。
至于你的问题
有哪些方法可以处理 System.nanoTime() 在调用之间返回相同的值?
正如克劳迪奥·科西建议的那样,我建议使用某种原子计数器。