Tag: nanotime

是System.nanoTime()完全无用?

正如在Java系统中的Beware of System.nanoTime()中所记载的,在x86系统上,Java的System.nanoTime()使用CPU特定的计数器返回时间值。 现在考虑一下我用来衡量一个通话时间的情况: long time1= System.nanoTime(); foo(); long time2 = System.nanoTime(); long timeSpent = time2-time1; 现在在一个多核系统中,可能是在测量了time1之后,线程被调度到一个不同于前一个CPU的计数器的处理器。 因此我们可以得到一个小于 time1的时间值2。 因此,我们会在timeSpent中得到一个负值。 考虑到这种情况,是不是现在System.nanotime几乎没用? 我知道改变系统时间不会影响碳纳米pipe。 这不是我上面描述的问题。 问题是,每个CPU自打开以来都会保持不同的计数器。 与第一个CPU相比,第二个CPU的计数器可以更低。 由于在得到time1之后,线程可以由OS调度到第二个CPU,timeSpent的值可能不正确,甚至是负值。