此问题不是针对System.nanoTime()
的攻击。我意识到使用它是一种令人惊讶的棘手方法。
有哪些方法可以处理System.nanoTime()
在呼叫之间返回相同的值?示例:多个线程调用System.nanoTime()
并获取相同的值。
我很惊讶在Windows上运行测试时,我经常在代码库中看到这种情况。我们使用nanoTime
对跨多个线程到达的事件进行排序。也许这只是一个Windows问题,Linux单调时钟更精细。
参考文献:
答案 0 :(得分:4)
要解释为什么你得到相同的值,请仔细阅读文档:
此方法提供纳秒精度,但不一定 纳秒分辨率(即,值的变化频率) - 否 除了分辨率至少与分辨率一样好之外,还要做出保证 currentTimeMillis()。
您的计算机可能没有足够的时钟分辨率,因此可能会有很长一段时间nanoTime
将返回相同的数字。
关于你的问题
有什么方法可以处理System.nanoTime()返回相同的内容 电话之间的价值?
我建议使用某种atomic counter,正如Claudio Corsi所暗示的那样。