java - system.nanoTime()运行得太慢了

时间:2012-04-05 10:23:08

标签: java nanotime

我在我的应用程序中使用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,因为我需要处理在纳秒时间内发生的ts并将其打印到日志中的纳米时间

1 个答案:

答案 0 :(得分:6)

就像Java API文档中提到的System.nanoTime()

  

此方法只能用于测量经过的时间而不是   与系统或挂钟时间的任何其他概念有关。价值   返回表示自某些固定但任意来源以来的纳秒   时间(也许在将来,所以价值可能是负面的)。相同   在a的实例中,此方法的所有调用都使用origin   Java虚拟机;其他虚拟机实例很可能   使用不同的来源。

     

此方法提供纳秒精度,但不一定   纳秒分辨率(即,值的变化频率) - 否   除了分辨率至少与分辨率一样好之外,还要做出保证   currentTimeMillis()。

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

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