System.currentTimeMillis () не является точным в Windows XP? - PullRequest
0 голосов
/ 22 октября 2011

Кажется, System.currentTimeMillis не очень точно.

Смотрите этот образец:

public class MillisTime {
    public static void main(String[] args) {
        long start = 0;
        long end = 0;
        while (true) {
            if (start == 0) {
                start = System.currentTimeMillis();
            } else {
                long current = System.currentTimeMillis();
                if (current != start) {
                    end = current;
                    break;
                }
            }
        }
        System.out.println("The time interval of your OS: " + (end - start) + "ms");
    }
}

Результат (в Windows XP):

The time interval of your OS: 15ms

Почему это не 1ms? А как получить точную миллисекунду текущего времени?

Ответы [ 3 ]

7 голосов
/ 22 октября 2011

Это вполне ожидаемо. То же самое вы увидите в .NET, используя DateTime.Now. (См. Сообщение Эрика Липперта в блоге на тему для ознакомления с .NET-ориентированной темой.)

Вы можете использовать System.nanoTime(), чтобы получить более точный таймер только для измерений - это не означает, что абсолютное время, это только для измерения интервалы .

Я не знаю ни одного способа получить более точное абсолютное время ни из Java, ни из Win32. Если честно, насколько точными будут системные часы? Даже при регулярной синхронизации с NTP-сервером я ожидаю погрешность в несколько миллисекунд.

По сути, если вы действительно рассчитываете абсолютное время, вам, вероятно, следует изменить свой дизайн.

2 голосов
/ 22 октября 2011

Да. Javadoc для System.currentTimeMillis() говорит это:

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

Вы можете использовать System.nanoTime(), но обязательно прочитайте его javadoc, чтобы понять его ограничения.

1 голос
/ 22 октября 2011

Невозможно добиться большей точности с помощью Java на Windows.

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