В Java, какой самый быстрый способ получить системное время? - PullRequest
8 голосов
/ 01 июля 2011

Я разрабатываю систему, которая часто использует системное время, потому что интерфейс Delayed.

Какой самый быстрый способ получить время от системы?

В настоящее время я используюCalendar.getInstance().getTimeInMillis() каждый раз, когда мне нужно получить время, но я не знаю, есть ли более быстрый путь.

Ответы [ 6 ]

17 голосов
/ 01 июля 2011

System.currentTimeMillis()
«Возвращает текущее время в миллисекундах» .
Используйте это, чтобы получить фактическое системное время.

System.nanoTime().
«Возвращаемое значение представляет наносекунды с некоторого фиксированного, но произвольного времени начала»
Используйте это для измерения промежутков времени / событий.

1 голос
/ 01 июня 2017

В кратком ответе, 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

Надеюсь, это поможет вам.

1 голос
/ 16 октября 2014

Для большого числа запросов, я полагаю, должен быть поток, отвечающий за обновление текущего системного времени, чтобы каждый поток не делал это независимо.

1 голос
/ 06 августа 2012

long timeMilliSec = System.currentTimeMillis();

1 голос
/ 01 июля 2011
System.currentTimeMillis 

простой ответ

1 голос
/ 01 июля 2011

System.currentTimeMillis() вероятно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...