2017-09-13 66 views
0

我试图用Java 8的LocalTime和Instant实现一个计数器,两者都正常工作,但输出结果有点混乱!当我使用Instant时,我在同一个循环中获得较小的值?任何想法?在Java 8中实现计数器的最佳方式是什么?

// using Instant 
Instant before=Instant.now(); 
// something time consuming 
for(int i=1;i<100000000;i++); 
Instant after=Instant.now(); 
Duration duration=Duration.between(before, after); 
System.out.println(duration.toMillis()); 


// using LocalTime 
LocalTime xBefore=LocalTime.now(); 
for(int i=1;i<100000000;i++); 
LocalTime yAfter=LocalTime.now(); 
System.out.println(ChronoUnit.MILLIS.between(xBefore, yAfter)); 
+0

谢谢你提到Holger! –

+1

*经过时间*和现实世界(“挂钟”)时间之间存在显着差异,因为系统时钟可能受到NTP校正等影响。如果您想测量*经过时间*,请使用['System.nanoTime()'](https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#nanoTime- - )并计算差异。但正常情况下,执行时间会随着JVM的优化器的工作而降低。您可以在链接的问答中阅读更多内容...... – Holger

回答

0

如果我正确地理解了你,你想以不同的方式计时for循环(什么都不做)。

这个for循环很有可能被完全优化掉,所以它使用的时间减少。

相关问题