package test;
import java.util.*;
public class Test2
{
public static void main(String[] args)
{
long t1=System.currentTimeMillis(); //排序前取得当前时间
try
{
Thread.currentThread().sleep(3160);
}
catch(Exception err)
{
}
long t2=System.currentTimeMillis(); //排序后取得当前时间
Calendar c=Calendar.getInstance();
c.setTimeInMillis(t2-t1);
System.out.println("耗时: " + c.get(Calendar.MINUTE) + "分 " + c.get(Calendar.SECOND) + "秒 " + c.get(Calendar.MILLISECOND) + " 微秒");
}
}
========转载开始分隔线========
注意事项:
System.currentTimeMillis() 本身会用掉约半毫秒(0.5ms)的执行时间,
任何需要呼叫这 method 两次的测量项目,
其时间差应该要超过 100ms,
确保 System.currentTimeMillis() 的成本不超过总量测值的 1%。
一般我会建议每秒不要超过一次的量测
(也就是不要每秒呼叫 System.currentTimeMillis() 两次)
资料来源:Java 效能调教技巧 p.18 O'Rielly 出版
========转载结束分隔线========
感谢痞子兄的转载~
文中提到System.currentTimeMillis()会用掉0.0005秒的Run time
可是System.currentTimeMillis()的精度,达0.001秒,2次
System.currentTimeMillis()也只是用掉0.001秒。
而要测量的时间通常是第二次System.currentTimeMillis()
减掉第一次System.currentTimeMillis(),误差应该也只是
0.001秒以内,请问文中提到必须间格0.1秒以上有什麽特
别的含意吗?
sungo wrote:
感谢痞子兄的转载~
文中提到System.currentTimeMillis()会用掉0.0005秒的Run time
可是System.currentTimeMillis()的精度,达0.001秒,2次
System.currentTimeMillis()也只是用掉0.001秒。
而要测量的时间通常是第二次System.currentTimeMillis()
减掉第一次System.currentTimeMillis(),误差应该也只是
0.001秒以内,请问文中提到必须间格0.1秒以上有什麽特
别的含意吗?
意思是说:两次 System.currentTimeMillis() 会花掉 1 ms,如果你在 100 ms 内使用两次计算时间差,实际上有这额外的 1 ms 在里头造成 1% 的误差(也就是说测量的动作所花的时间实际上约只有 99 ms,而你每次的测量动作都额外引进 1% 的时间误差进来)。
但我个人觉得第一次标记时间的 System.currentTimeMillis method call 实际上引进来的多余时间不到 0.5 ms(因为其传回的时间应该是经过这一道取时间繁复手续後的时间),标记结束时间的这一个才需要考虑进来。
原来是这个意思!那只要我们把量测完的秒数,
扣掉0.001秒<2次System.currentTimeMillis() >,
就可以得到比较精确一点的时间了。