3

这个问题无意攻击System.nanoTime(). 我意识到正确使用这是一种非常棘手的方法。

有哪些方法可以处理System.nanoTime()在调用之间返回相同的值?示例:多个线程调用System.nanoTime()并获得相同的值。

在 Windows 上运行测试时,我很惊讶在我的代码库中经常看到这种情况。我们nanoTime用来对跨多个线程到达的事件进行排序。也许这只是一个 Windows 问题,而 Linux 单调时钟更加精细。

参考:

4

1 回答 1

4

要解释为什么你得到相同的值,请更仔细地阅读文档:

此方法提供纳秒精度,但不一定提供纳秒分辨率(即值更改的频率) - 不保证分辨率至少与 currentTimeMillis() 的分辨率一样好。

您的计算机可能没有足够的时钟分辨率,因此可能有很多时间nanoTime会返回相同的数字。

至于你的问题

有哪些方法可以处理 System.nanoTime() 在调用之间返回相同的值?

正如克劳迪奥·科西建议的那样,我建议使用某种原子计数器。

于 2014-12-22T04:07:11.773 回答