我正在为 Web 服务编写一些代码,我想跟踪请求进入的速度。我通过使用 System.nanoTime() 为每个请求记录时间戳来实现这一点
。我选择它而不是 System.currentTimeMillis()
是因为我只关心相对于当前时间的时间,而不关心任何日历,而且我不希望它受到系统时钟更新的影响。
但是,nanotime()
似乎在多核环境中表现不佳,因为每个 CPU 内核的启动时间都不同。
我正在寻找一种获取数字(long
)时间戳的方法,即:
- 与当前日历时间无关
- 在多个核心/线程之间保持一致
- 相对便宜(最好不使用反射)
有什么想法吗?
最佳答案
除非线程明确同步,否则您无法保证产生时钟值的方式。显然它对性能有影响。你应该重新设计你的系统,不要依赖这样的时钟。如果您需要多线程系统中的计时,也许您应该查看 Vector Clock .
关于java - 多线程环境中的事件时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25271830/