我有一个线程将数据推入队列,另一个线程从队列中读取数据并对其进行处理。我想在处理之前检查数据在队列中的时间长度。
我在第一个线程推送之前在数据中添加了一个时间参数(使用System.nanoTime()
计算)。一旦第二个线程处理它,它将计算System.nanoTime()
并找出与数据中设置的上一个时间的差异。
这会正常吗?我问这个是因为我看到了日志中的负面差异。
更新
我想澄清的是,开始时间是由一个进程放在另一台机器上,差异是在另一台机器上计算的。
答案 0 :(得分:3)
我在线程和进程之间使用了System.nanoTime()。在一台机器上,它是全局的和单调增加的(除了多插槽Windows XP)
如果您发现负面差异,则很可能是代码中存在错误。
您可以在机器之间看到nanoTime(),但您必须调整时钟之间的差异和漂移。 (如果你不进行这种修正,你可以得到很大的负面结果)
开始时间由一个进程放在另一台机器上,差异在另一台机器上计算。
在您需要的机器之间
如果您只对数毫秒的延迟感兴趣,我会使用currentTimeMillis()