Короткий ответ - нет, System.currentTimeMillis()
- это , а не монотонно. Он основан на системном времени и, следовательно, может изменяться в любом направлении (вперед или назад) в случае настройки часов (например, через NTP ).
System.nanoTime()
является монотонным, если и только если базовая платформа поддерживает CLOCK_MONOTONIC
- см. Комментарии к Отчет об ошибках Java 6458294 для хорошей записи при некоторых обстоятельствах, где это / нет правда.
(И, как дополнительный анекдот, я лично наблюдал (несколько раз) System.currentTimeMillis()
запускать «назад», при отсутствии настроек часов, между потоками - то есть возвращался вызов этого метода в одном потоке более низкое значение, чем вызов в другом потоке, даже если он произошел в хронологическом порядке после него в режиме реального времени)
Если вам нужен монотонный источник, System.nanoTime()
на платформе, поддерживающей монотонность, - ваш лучший вариант.