Date
использует System.currentTimeMillis()
, который использует ваши "настенные часы".Эти настенные часы не гарантируются монотонным увеличением, а вместо этого настраиваются так, чтобы соответствовать лучшим часам в Интернете, к которым он может получить доступ, например, через NTP.
16 секунд - довольно большой скачок во времени, поэтому я бы посмотрелкак ваш NTP настроен.Обычно NTP пытается сгладить свои исправления, но его можно принудительно сразу перейти к определенному времени.
ПРИМЕЧАНИЕ. В то время как условия гонки между потоками могут вызывать такое поведение, вряд ли произойдет скачок времени в 16 секунд.вот так.
Чтобы решить условие гонки, вы можете удерживать блокировку на System.out
, чтобы избежать одновременных попыток записи выходных данных.
private void printTime() {
synchronized(System.out) {
System.out.println("<TIME>" + _dateFormat.format(new Date()) + "</TIME>");
}
}