На основе идей, представленных в ссылке, я реализовал несколько различных "методов сна". Одно из этого, методы были "двоичным сном", который похож на это:
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
Нет, это не так. Его младший брат System # nanoTime ()
имеет гораздо лучшую точность , чем System # currentTimeMillis ()
.
Помимо ответов в их Javadocs (щелкните по ссылкам здесь выше), эта тема здесь тоже несколько раз обсуждалась. Выполните поиск по «currenttimemillis vs nanotime» , и по каждой из этих тем вы найдете: System.currentTimeMillis vs System.nanoTime .
То, что вы видите, - это базовые часы с разрешением 15 мс. Это особенность ОС и частота прерываний. Есть патч для ядра linux, увеличивающий это разрешение до 1 мс, насчет окон я не уверен. Об этом уже было опубликовано несколько сообщений .
Согласно документации,
* Возвращает текущее время в миллисекундах. Обратите внимание, что * в то время как единица времени возвращаемого значения - миллисекунда, * степень детализации значения зависит от базового * операционная система и может быть больше. Например, многие * операционные системы измеряют время в единицах десятков * миллисекунды.