0

这是我谦虚的建议:

  1. JVM 启动时
    1. 调用System.currentTimeMillis()并存储为开始“挂钟”时间:
      long currentTimeMillis0.
    2. 调用System.nanoTime()并存储为开始“纳米”时间:
      long nanoTime0.
  2. 在整个程序运行过程中,使用System.nanoTime().

我很清楚 nanoTime 的确切值本身没有用,但在持续时间的上下文中使用时很有用:endNanoTime - beginNanoTime.

那么,在任何记录的 nanoTime 中,将“currentTimeNanos”计算为: 是否合理
(1000L * currentTimeMillis0) + (anyNanoTime - nanoTime0)

4

2 回答 2

1

我认为你需要结合开始/结束时间,无论是毫秒还是纳米。例如:

long startTimeMillis = System.currentTimeMillis() * 1000;
long startTimeNano = System.nanoTime();
... // do some work
long currentTimeNano = (System.currentTimeMillis()*1000 - startTimeMillis) + (System.nanoTime() - startTimeNano);

更多信息,nanoTime方法的官方javadoc: https://docs.oracle.com/javase/1.5.0/docs/api/java/lang/System.html#nanoTime()

于 2016-01-10T15:56:30.800 回答
1

我使用毫秒和纳米时间的地方是我使用纳米时间来计算时间上的微小差异,并在开始时使用毫秒计时器来提供上下文。

注意:如果您有连续的计时流,则可以在机器之间使用纳米时间。即你可以估计它们之间的最佳时间并检测异常值(即使你不知道绝对差异)我使用这个类来帮助估计RunningMinimum

于 2016-01-10T16:16:16.220 回答