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

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

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

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

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

BR,

Маркус

@irreputable

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

Häufigkeit = частота

Fehler = ошибка

средняя примерно = средняя

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

alt текст http://img694.imageshack.us/img694/2254/bellcurve.jpg

3 ответов


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

помимо ответов в их Javadocs (нажмите на ссылки здесь выше), эта тема также обсуждалась несколько раз здесь. Сделайте поиск на "currenttimemillis vs nanotime" и вы попадете под каждую эту тему:


в документах,

 * Returns the current time in milliseconds.  Note that
 * while the unit of time of the return value is a millisecond,
 * the granularity of the value depends on the underlying
 * operating system and may be larger.  For example, many
 * operating systems measure time in units of tens of
 * milliseconds.

то, что вы видите, является базовым разрешением часов до 15 мс. Это особенность скорости OS & interrupt. Существует патч для ядра linux, чтобы увеличить это разрешение до 1 мс, я не уверен в windows. Было несколько посты об этом уже.