2009-12-14 5 views
6

На основе идей, представленных в link Я реализовал несколько различных методов сна. Один из этих методов были «бинарное сон», который выглядит следующим образом:Действительно ли метод System.currentTimeMillis() действительно возвращает текущее время?

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

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

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

БР,

Маркус

@irreputable

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

Häufigkeit = частота

Fehler = ошибка

Mittelwert = средний

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

alt text http://img694.imageshack.us/img694/2254/bellcurve.jpg

+1

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

+0

Ох, ты прав. Возможно, я должен чаще смотреть на связанные темы, прежде чем писать вопрос :-) – Markus

+0

+1 для кривой. мы знали, что это не точно, но приятно видеть некоторую количественную оценку. можете ли вы сделать кривую колокола? – irreputable

ответ

10

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

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

+2

nanoTime() имеет лучшую точность, но точность все равно совпадает с currentTimeMillis() (зависит от базовой операционной системы). См. Http://en.wikipedia.org/wiki/Accuracy_and_precision –

+0

Спасибо за головы (английский не мой родной). Я исправил это. – BalusC

+1

Однако .. Ваш английский тоже не так хорош. Это должно быть «его» (из этого), а не «это» (это так): o) – BalusC

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. 
2

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

 Смежные вопросы

  • Нет связанных вопросов^_^