0

我在我的应用程序中使用 system.nanoTime 并计算相对于开始时间的时间。
我的应用程序运行得非常好,直到我将它复制到一台新计算机上,并且纳米时间给了我较慢的值。

我写了一个简单的应用程序只是为了确保。
纳米时间与系统时间进行比较。
它在除我的新计算机之外的其他计算机中显示相同的值。有什么建议么?

这是我的代码:首先我有

private long initNanoTime = System.nanoTime();
private long initTime = System.currentTimeMillis();

比我循环一个每秒运行的线程:

long timeUsingNanoTime = initTime + (System.nanoTime() - initNanoTime) / 1000000;
long timeUsingMilis = System.currentTimeMillis();
long nanotimeOffset = Math.abs(timeUsingNanoTime - timeUsingMilis);
if (nanotimeOffset < 100l) ? print("close") : print(far);

编辑:我正在使用 nano 因为我需要处理在 nano 时间内发生的甚至 ts 并将接收到的 nano time 打印到日志中

4

1 回答 1

6

就像 Java API 文档所说的那样System.nanoTime()

此方法只能用于测量经过的时间,与系统或挂钟时间的任何其他概念无关。返回的值表示自某个固定但任意的原始时间以来的纳秒(可能在将来,因此值可能为负数)。在 Java 虚拟机实例中,此方法的所有调用都使用相同的来源;其他虚拟机实例可能使用不同的来源。

此方法提供纳秒精度,但不一定提供纳秒分辨率(即值更改的频率) - 不保证分辨率至少与 currentTimeMillis() 的分辨率一样好。

它不提供与时间戳(currentTimeMillis)的任何耦合,也不提供固定的分辨率。

在您的情况下,Java 现在似乎具有比以前更高分辨率的计时器,因此不需要使用系统时间。

于 2012-04-05T10:28:16.193 回答