2011-07-01 9 views
5

Opracowuję system, który często korzysta z czasu systemowego, ponieważ interfejs Delayed.W języku Java, jaki jest najszybszy sposób na uzyskanie czasu systemowego?

Jaki jest szybki sposób uzyskania czasu z systemu?

Obecnie używam Calendar.getInstance().getTimeInMillis() za każdym razem, gdy potrzebuję czasu, ale nie wiem, czy istnieje szybszy sposób.

+0

gdzie używasz czasu millis z DelayQueue? – Bozho

+0

Nie było jasne, używam tylko w klasie implementującej interfejs opóźniony w metodzie 'getDelay()'. –

+0

@Renato, Calendar.getInstance() i nowa Date() używają System.currentTimeMillis() jednak Kalendarz jest zdecydowanie najwolniejszy. –

Odpowiedz

17

System.currentTimeMillis()
"Zwraca bieżący czas w milisekundach".
Służy do uzyskania aktualnego czasu systemowego.

System.nanoTime().
"Zwrócona wartość reprezentuje nanosekundę od pewnego ustalonego, ale arbitralnego czasu rozpoczęcia"
Używaj tego pomiaru czasu/zdarzeń.

+2

Należy pamiętać, że te dwie metody mają różne cechy i należy wybrać tę, która jest odpowiednia do tego, do czego jest potrzebna. –

+0

O ile mi wiadomo, DelayQueue używa TimeUnit.NANOSECONDS używa do obliczeń czasu, więc być może "System.nanoTime()" jest bardziej odpowiedni w tym przypadku, aby uniknąć konieczności konwersji na jednostkę w metodzie getDelay(). –

+0

Możesz użyć dowolnej jednostki, więc albo działa. nanoTime jest bardziej precyzyjny – Bozho

1

System.currentTimeMillis() prawdopodobnie.

+0

to currentTimeMillis – Bozho

+1

tak, poprawiłem go, ale byłeś szybszy;) – kukudas

1
System.currentTimeMillis 

jest prosta odpowiedź

1

long timeMilliSec = System.currentTimeMillis();

1

dla dużej liczby żądań, uważam, że powinien być wątek za bieżący czas aktualizacji systemu avoing każdego wątku robi to samodzielnie.

+0

Prawda, ale wszystkie systemy operacyjne, które widziałem, robią to dla ciebie – Rhumborl

0

W krótkiej odpowiedzi, System.currentTimeMillis() jest szybszy.

@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); 
} 

Pobiegłem powyżej przypadków testowych i znalazłem następujący wynik:

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 

Mam nadzieję, że to pomoże.

Powiązane problemy