我写了个非常简单的测试循环时间的程序,如下:import java.util.Date;public class loop {
public static void main(String [] args) throws Exception { Date d1 = new Date();
for(int i=0; i<100; i=i+1){ Thread.sleep(1); } //loop1, 每次循环sleep 1ms
Date d2 = new Date(); Date d3 = new Date();
for(int i=0; i<100; i=i+1){ Thread.sleep(0); } //loop2,空循环
Date d4 = new Date(); long loop1 = d2.getTime()-d1.getTime(); //loop1循环花费的时间
System.out.print("Loop1 Time: " + loop1 + " (ms)" + '\n'); long loop2 = d4.getTime()-d3.getTime(); //loop2循环花费的时间
System.out.print("Loop2 Time: " + loop2 + " (ms)" + '\n');
}
}
输出是Loop1 Time: 203 ms
Loop2 Time: 0 ms
我有点不明白,第一个循环loop1花费的时间是203ms,再减去sleep的时间100*1ms,就应该得到的是空循环的时间103ms啊。但是第二个空循环loop2花费的时间却是0ms而不是103ms。Why?我的计算方法有问题?请问,如果我设置了Thread.sleep(1);得到了循环的时间,该用何种计算方式可以推导出删除这句sleep(1)语句的循环时间? 谢谢~!
public static void main(String [] args) throws Exception { Date d1 = new Date();
for(int i=0; i<100; i=i+1){ Thread.sleep(1); } //loop1, 每次循环sleep 1ms
Date d2 = new Date(); Date d3 = new Date();
for(int i=0; i<100; i=i+1){ Thread.sleep(0); } //loop2,空循环
Date d4 = new Date(); long loop1 = d2.getTime()-d1.getTime(); //loop1循环花费的时间
System.out.print("Loop1 Time: " + loop1 + " (ms)" + '\n'); long loop2 = d4.getTime()-d3.getTime(); //loop2循环花费的时间
System.out.print("Loop2 Time: " + loop2 + " (ms)" + '\n');
}
}
输出是Loop1 Time: 203 ms
Loop2 Time: 0 ms
我有点不明白,第一个循环loop1花费的时间是203ms,再减去sleep的时间100*1ms,就应该得到的是空循环的时间103ms啊。但是第二个空循环loop2花费的时间却是0ms而不是103ms。Why?我的计算方法有问题?请问,如果我设置了Thread.sleep(1);得到了循环的时间,该用何种计算方式可以推导出删除这句sleep(1)语句的循环时间? 谢谢~!
我个人认为用Thread.sleep(1)去测试循环时间是不对的。不过也支持一下
测试了一下,loop应该是每次运行结果都不一定相同。
因public long getTime()返回long型,数太小,有时感觉第二个总是0