java 计算时间差


原文出处: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() >, 就可以得到比较精确一点的时间了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值