2011-07-01 20 views
5

私はDelayedインターフェイスなので、システム時間をよく使うシステムを開発しています。Javaでは、システム時間を得る最も速い方法は何ですか?

システムから時間を得るにはどうすればよいですか?

現在、私は時間を得る必要があるたびにCalendar.getInstance().getTimeInMillis()を使用していますが、より高速な方法があるかどうかはわかりません。

+0

ここで、DelayQueueで時間ミリ秒を使用しますか? – Bozho

+0

私は明確ではなかった、私は 'getDelay()'メソッドでDelayedインターフェースを実装しているクラスでのみ使う。 –

+0

@Renato、Calendar.getInstance()およびnew Date()はどちらもSystem.currentTimeMillis()を使用していますが、カレンダーははるかに遅いです。 –

答えて

17

System.currentTimeMillis()
"ミリ秒単位で現在の時刻を返します"。
これを使用して実際のシステム時刻を取得します。

System.nanoTime()
「値が返され、いくつかの固定ではなく任意の原点時からナノ秒を表し、」
これはあなたが時間経過/イベントを測定しているで使用してください。

+2

2つのメソッドには異なる特性があり、必要なものに適したものを選択する必要があります。 –

+0

私が知る限り、DelayQueueはTimeUnit.NANOSECONDSを使用して時間の計算を行います。この場合、getDelay()メソッドでユニットに変換する必要がないため、おそらくSystem.nanoTime()が適しています。 –

+0

いずれかのユニットを使用することができます。 nanoTimeはより正確です – Bozho

1

System.currentTimeMillis()おそらく。

+0

それはcurrentTimeMillis – Bozho

+1

はい私はそれを修正しましたが、あなたは速かった;) – kukudas

1
System.currentTimeMillis 

が単純な答え大きな要求数については

1

long timeMilliSec = System.currentTimeMillis();

1

ですが、私は独立して、それをやって、各スレッドをavoing更新を担当するスレッドの現在のシステム時刻があるはずと信じています。

+0

私が見たすべてのオペレーティングシステムはあなたのためにそれをする傾向があります – Rhumborl

0

短い答えでは、System.currentTimeMillis()が高速です。

@Test 
public void testSystemCurrentTime() { 
    final Stopwatch stopwatch = Stopwatch.createStarted(); 
    for (int i = 0; i < 1_00_000; i++) { 
     System.currentTimeMillis(); 
    } 
    stopwatch.stop(); 
    System.out.println("System.currentTimeMillis(): " + stopwatch); 
} 

@Test 
public void testDateTime() { 
    final Stopwatch stopwatch = Stopwatch.createStarted(); 
    for (int i = 0; i < 1_00_000; i++) { 
     (new Date()).getTime(); 
    } 
    stopwatch.stop(); 
    System.out.println("(new Date()).getTime(): " + stopwatch); 
} 

@Test 
public void testCalendarTime() { 
    final Stopwatch stopwatch = Stopwatch.createStarted(); 
    for (int i = 0; i < 1_00_000; i++) { 
     Calendar.getInstance().getTimeInMillis(); 
    } 
    stopwatch.stop(); 
    System.out.println("Calendar.getInstance().getTimeInMillis(): " + stopwatch); 
} 

私は、テストケースの上に走ったと私は、次の結果が見つかりました:私は、これはあなたを助けるでしょう、期待し

System.currentTimeMillis(): 5.208 ms (new Date()).getTime(): 19.57 ms Calendar.getInstance().getTimeInMillis(): 148.2 ms 
System.currentTimeMillis(): 4.685 ms (new Date()).getTime(): 11.53 ms Calendar.getInstance().getTimeInMillis(): 122.6 ms 
System.currentTimeMillis(): 4.734 ms (new Date()).getTime(): 11.66 ms Calendar.getInstance().getTimeInMillis(): 131.5 ms 
System.currentTimeMillis(): 4.018 ms (new Date()).getTime(): 19.33 ms Calendar.getInstance().getTimeInMillis(): 127.6 ms 
System.currentTimeMillis(): 5.474 ms (new Date()).getTime(): 16.74 ms Calendar.getInstance().getTimeInMillis(): 113.6 ms 
System.currentTimeMillis(): 3.871 ms (new Date()).getTime(): 14.46 ms Calendar.getInstance().getTimeInMillis(): 120.5 ms 
System.currentTimeMillis(): 8.223 ms (new Date()).getTime(): 11.65 ms Calendar.getInstance().getTimeInMillis(): 173.8 ms 
System.currentTimeMillis(): 4.611 ms (new Date()).getTime(): 9.978 ms Calendar.getInstance().getTimeInMillis(): 117.9 ms 
System.currentTimeMillis(): 3.794 ms (new Date()).getTime(): 11.33 ms Calendar.getInstance().getTimeInMillis(): 89.79 ms 
System.currentTimeMillis(): 4.298 ms (new Date()).getTime(): 12.37 ms Calendar.getInstance().getTimeInMillis(): 123.8 ms 

を。

関連する問題