Вопрос по time, sleep, java – Действительно ли метод System.currentTimeMillis () возвращает текущее время?

6

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

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

Ооо, ты прав. Может быть, я должен смотреть чаще на связанные темы, прежде чем писать вопрос :-) Markus
+1 за кривую. мы знали этоне точно, но этоПриятно видеть некоторое количественное определение. Вы можете сделать это кривой колокола? irreputable
Я пытался задать вопрос наstackoverflow.com/questions/ask и я скопировал тему вашей темы в мой новый тест-вопрос, и, вводя поле сообщения, я получил список всех (очень) соответствующих тем, которые уже отвечают на ваш вопрос. Мне было интересно, если вы действительно заметили и исследовали это? BalusC

Ваш Ответ

3   ответа
2

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

2

 * 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.
10

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

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

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

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