Сегодня у меня возникла интересная проблема «путешествия во времени», используя следующий код:
for (int i = 0; i < 1; i++){
long start = System.currentTimeMillis();
// Some code here
System.out.print(i + "\t" + (System.currentTimeMillis() - start));
start = System.currentTimeMillis();
// Some code here
System.out.println("\t" + (System.currentTimeMillis() - start));
}
И я получил результат
0 15 -606
И кажется, что это не повторяется. У кого-нибудь есть какие-либо подсказки о том, что произошло внутри во время бега? Просто любопытно ...
Новое редактирование: я использовал небольшой тест для подтверждения ответов ниже. Я запускаю программу и изменяю системное время во время запуска, и, наконец, повторяю «путешествие во времени»:
0 -3563323 163
Дело закрыто. Спасибо, ребята!
Больше слов: currentTimeMillis () и nanoTime () основаны на системном таймере, поэтому они не будут монотонными, если системный таймер обновлен (в частности, повернут назад). Для таких случаев лучше использовать интернет-таймер.