我写了个非常简单的测试循环时间的程序,如下: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)语句的循环时间? 谢谢~!
解决方案 »
- 唉,再次紧急麻烦各位兄弟,使用正则有没有办法处理这个问题
- 关于coreJava中的一个例子
- 发段简单代码的代码分析。
- 想添加一些按钮,但是要保持原程序可以正常运行
- GUI设计中的类型检查
- 问一个 菜鸟问题 但有可能许多人都没注意到java现象 请各位大虾指点
- 我从文件中一行一行读数据,用的是DataInputStream,但是文件太大就出问题了,怎么回事,最大是多少?
- 请问applet和application之间有什么不同呢?
- 我想在bcb中调用一个用Java写的函数,请问有办法实现吗?急!
- 你说要实现QQ那样的软件或者说那种规模、形式的软件最重要的是什么?
- 急救!
- java API中文版可以下载了吗?
我个人认为用Thread.sleep(1)去测试循环时间是不对的。不过也支持一下
测试了一下,loop应该是每次运行结果都不一定相同。
因public long getTime()返回long型,数太小,有时感觉第二个总是0