java - 多线程环境中的事件时间戳

标签 java time timer

我正在为 Web 服务编写一些代码,我想跟踪请求进入的速度。我通过使用 System.nanoTime() 为每个请求记录时间戳来实现这一点。我选择它而不是 System.currentTimeMillis() 是因为我只关心相对于当前时间的时间,而不关心任何日历,而且我不希望它受到系统时钟更新的影响。

但是,nanotime() 似乎在多核环境中表现不佳,因为每个 CPU 内核的启动时间都不同。

我正在寻找一种获取数字(long)时间戳的方法,即:

  • 与当前日历时间无关
  • 在多个核心/线程之间保持一致
  • 相对便宜(最好不使用反射)

有什么想法吗?

最佳答案

除非线程明确同步,否则您无法保证产生时钟值的方式。显然它对性能有影响。你应该重新设计你的系统,不要依赖这样的时钟。如果您需要多线程系统中的计时,也许您应该查看 Vector Clock .

关于java - 多线程环境中的事件时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25271830/

相关文章:

Java高分辨率 hibernate

c# - 在设定的时间段内用于设定数量的实例的随机间隔生成器

c++ - 使用计时器和信号而不是 sleep c/c++

javascript - 寻找具有素面的多边形区域

java - 用于将文件从 HDFS 复制到 AWS S3 的 Hadoop 服务器连接

java - 在 ala google 文档的网站上呈现 pdf

java - 无法停止 retrofit 发送

javascript - 如何将 "hhmmss"格式的数字转换为时间格式hh :mm:ss using javascript?

c++ - 需要使用 linux ubuntu 从 .cpp 查找上次启动的时间?

perl - 以秒为单位的时差