java 计算时间差

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值