Метод System.currentTimeMillis () действительно возвращают текущее время?

На основе идей, представленных в ссылке, я реализовал несколько различных "методов сна". Одно из этого, методы были "двоичным сном", который похож на это:

while (System.currentTimeMillis() < nextTimeStamp)
{
sleepTime -= (sleepTime / 2);
sleep(sleepTime);
}

Поскольку проверка, если бы следующий временной интервал уже достигнут, происходит вначале я, ожидал бы, что метод работает слишком долго. Но кумулятивное распределение ошибки моделирования (ожидаемое время - реальное время) похоже на это: сопроводительный текст http://img267.imageshack.us/img267/4224/errorvscummulativearran.jpg

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

BR,

Markus

@irreputable

Когда я сделал оценку, я также создал кривую нормального распределения при помощи немецкой статистической программы. Поскольку не было возможно изменить подпись, вот английский перевод всех соответствующих объектов:

Häufigkeit = частота

Fehler = ошибка

Mittelwert = среднее число

Станд.-Abw = стандартное отклонение

сопроводительный текст http://img694.imageshack.us/img694/2254/bellcurve.jpg

6
задан Community 23 May 2017 в 11:53
поделиться

3 ответа

Нет, это не так. Его младший брат System # nanoTime () имеет гораздо лучшую точность , чем System # currentTimeMillis () .

Помимо ответов в их Javadocs (щелкните по ссылкам здесь выше), эта тема здесь тоже несколько раз обсуждалась. Выполните поиск по «currenttimemillis vs nanotime» , и по каждой из этих тем вы найдете: System.currentTimeMillis vs System.nanoTime .

10
ответ дан 8 December 2019 в 17:22
поделиться

То, что вы видите, - это базовые часы с разрешением 15 мс. Это особенность ОС и частота прерываний. Есть патч для ядра linux, увеличивающий это разрешение до 1 мс, насчет окон я не уверен. Об этом уже было опубликовано несколько сообщений .

2
ответ дан 8 December 2019 в 17:22
поделиться

Согласно документации,

  * Возвращает текущее время в миллисекундах. Обратите внимание, что
 * в то время как единица времени возвращаемого значения - миллисекунда,
 * степень детализации значения зависит от базового
* операционная система и может быть больше. Например, многие
 * операционные системы измеряют время в единицах десятков
 * миллисекунды.
2
ответ дан 8 December 2019 в 17:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: