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