System.nanoTime()在调用之间返回相同值时如何处理?

时间:2014-12-22 04:00:11

标签: java nanotime

此问题不是针对System.nanoTime()的攻击。我意识到使用它是一种令人惊讶的棘手方法。

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

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

参考文献:

1 个答案:

答案 0 :(得分:4)

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

  

此方法提供纳秒精度,但不一定   纳秒分辨率(即,值的变化频率) - 否   除了分辨率至少与分辨率一样好之外,还要做出保证   currentTimeMillis()。

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

关于你的问题

  

有什么方法可以处理System.nanoTime()返回相同的内容   电话之间的价值?

我建议使用某种atomic counter,正如Claudio Corsi所暗示的那样。