標籤:
目前擷取毫秒值大概有下面三種方法
Java代碼
- //方法 一
- System.currentTimeMillis();
- //方法 二
- Calendar.getInstance().getTimeInMillis();
- //方法 三
- new Date().getTime();
最近做監控系統,發現代碼中有前兩種方法,然後突然有了一個想法,到底哪個更快呢?
然後做了如下實驗:
Java代碼
- import java.util.Calendar;
- import java.util.Date;
-
- public class TimeTest {
- private static long _TEN_THOUSAND=10000;
- public static void main(String[] args) {
- long times=1000*_TEN_THOUSAND;
- long t1=System.currentTimeMillis();
- testSystem(times);
- long t2=System.currentTimeMillis();
- System.out.println(t2-t1);
- testCalander(times);
- long t3=System.currentTimeMillis();
- System.out.println(t3-t2);
- testDate(times);
- long t4=System.currentTimeMillis();
- System.out.println(t4-t3);
- }
-
- public static void testSystem(long times){//use 188
- for(int i=0;i<times;i++){
- long currentTime=System.currentTimeMillis();
- }
- }
-
- public static void testCalander(long times){//use 6299
- for(int i=0;i<times;i++){
- long currentTime=Calendar.getInstance().getTimeInMillis();
- }
- }
-
- public static void testDate(long times){
- for(int i=0;i<times;i++){
- long currentTime=new Date().getTime();
- }
-
- }
-
- }
因為很簡單我就不加註釋了,每種方法都運行1千萬次,然後查看運行結果
Java代碼
- 187
- 7032
- 297
結果發現 System.currentTimeMillis() 這種方式速度最快
Calendar.getInstance().getTimeInMillis() 這種方式速度最慢,看看源碼會發現,Canlendar因為要處理時區問題會耗費很多的時間。
所以建議多使用第一種方式。
另,System 類中有很多高效的方法,比如,arrayCopy 之類的
http://tangmingjie2009.iteye.com/blog/1543166
JAVA擷取時間戳記,哪個更快