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

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

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

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

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

BR,

Markus

@irreputable

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

уфигкеит = частота

Fehler = ошибка

Mittelwert = средний

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

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

 irreputable14 дек. 2009 г., 20:03
+1 за кривую. мы знали этоне точно, но этоПриятно видеть некоторое количественное определение. Вы можете сделать это кривой колокола?
 Markus14 дек. 2009 г., 19:04
Ооо, ты прав. Может быть, я должен смотреть чаще на связанные темы, прежде чем писать вопрос :-)
 BalusC14 дек. 2009 г., 18:58
Я пытался задать вопрос наstackoverflow.com/questions/ask и я скопировал тему вашей темы в мой новый тест-вопрос, и, вводя поле сообщения, я получил список всех (очень) соответствующих тем, которые уже отвечают на ваш вопрос. Мне было интересно, если вы действительно заметили и исследовали это?

Ответы на вопрос(3)

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

 * 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.
Решение Вопроса

System#nanoTime() намного лучшеточность чем.System#currentTimeMillis()

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

 Steve Kuo14 дек. 2009 г., 19:07
nanoTime () имеет лучшую точность, но этоТочность по-прежнему та же, что и currentTimeMillis () (зависит от базовой операционной системы). Увидетьen.wikipedia.org/wiki/Accuracy_and_precision
 BalusC14 дек. 2009 г., 19:41
Однако .. Ваш английский тоже не так хорош. Так должно быть "его" (этого) и не "его" (это): о)
 BalusC14 дек. 2009 г., 19:18
Спасибо за внимание (английский не мой родной). Я'мы это исправили.
 Skip Head14 дек. 2009 г., 23:54
Muphry»Закон поражает снова.

Ваш ответ на вопрос