Имейте в виду, что есть некоторые проблемы, когда System#nanoTime()их нельзя надежно использовать на многоядерных процессорах для записи прошедшего времени ... каждое ядро поддерживает свой собственный TSC ( счетчик отметок времени ): этот счетчик используется для получения нано-времени (на самом деле это количество тиков с момента загрузки ЦП).
Следовательно, если ОС не выполняет некоторую деформацию времени TSC, чтобы синхронизировать ядра, тогда, если поток планируется на одном ядре, когда выполняется начальное считывание времени, а затем переключается на другое ядро, относительное время может спорадически перемещаться назад и вперед.
Я наблюдал это некоторое время назад на AMD / Solaris, где время, прошедшее между двумя временными точками, иногда возвращалось либо как отрицательные значения, либо как неожиданно большие положительные числа. Для принудительной установки AMD PowerNow! Требовались патч ядра Solaris и настройки BIOS. off, который, похоже, решил эту проблему.
Кроме того, есть (AFAIK) пока еще не исправленная ошибка при использовании java System#nanoTime()в среде VirtualBox; вызывая для нас всевозможные причудливые периодические проблемы с потоками, поскольку большая часть java.util.concurrencyпакета полагается на нано-время.
Смотрите также:
System.nanoTime () совершенно бесполезен?
http://vbox.innotek.de/pipermail/vbox-trac/2010-January/135631.html