java中的计时器精度

时间:2009-08-07 15:21:24

标签: java timer

我正在计算一些东西,我不能把它放在一个很长的循环中。我需要给他们时间看他们需要多长时间才能完成,但似乎计时器在java中的准确度为15-16毫秒?我怎么能绕过这个?

2 个答案:

答案 0 :(得分:8)

您是否尝试过使用System.nanoTime()

来自Javadoc:

  

返回最精确的可用系统计时器的当前值,以纳秒为单位。

     

此方法只能用于测量经过的时间,与系统或挂钟时间的任何其他概念无关。返回的值表示纳秒,因为某些固定但是任意时间(可能在将来,因此值可能为负)。该方法提供纳秒精度,但不一定是纳秒精度。不保证值的变化频率。跨越大于约292年(2 63 纳秒)的连续调用的差异将无法准确计算由于数值溢出而导致的经过时间。

     

例如,要测量一些代码执行所需的时间:

     

long startTime = System.nanoTime();     // ...正在测量的代码......     long estimatedTime = System.nanoTime() - startTime;

答案 1 :(得分:4)

Clocks and Timers - General Overview

  

时钟和计时器的Java编程API 绝对   “时间”时钟由表示   System.currentTimeMillis()方法,   返回毫秒   挂钟时间的表示   自纪元以来的毫秒数。因此   它使用操作系统的“时间   日“时钟。更新决议   这个时钟通常与之相同   定时器中断(例如10ms),但是打开   一些系统是固定的,独立于   中断率。

     

表示相对时钟   通过System.nanoTime()方法得到的   返回“自由运行”时间   纳秒。这个时间只是有用的   与其他nanoTime进行比较   值。 nanoTime方法使用   最高分辨率时钟可用   平台,而它的回归   值以纳秒为单位,更新   分辨率通常只是   微秒。但是,在某些系统上   别无选择,只能使用相同的东西   时钟源   currentTimeMillis() - 幸运的是这个   是罕见的,主要影响旧的Linux   系统和Windows 98。