原文出处:http://blog.csdn.net/xubo578/article/details/6101230
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() >, 就可以得到比较精确一点的时间了。