Нет, вы не можете полагаться на Thread.sleep (1000), так как это зависит от планировщика ЦП относительно того, когда ваш поток действительно будет запущен в следующий раз.
Кроме того, тайминги ЦП не совсем точны , поэтому вы получите естественное отклонение от истинного времени, если вы не синхронизируете с надлежащей службой времени (атомные часы).
Сказав, что, однако, если вы действительно намереваетесь запустить «миллионы часов», вам будет лучше иметь один обновляемый таймер и просто хранить смещение этого таймера в каждом экземпляре часов.
Кроме того, сокращая время, в течение которого поток спит, и обновляя секунды только по мере необходимости, вы можете повысить свою точность. Обратите внимание, что, как упоминалось выше, время ожидания составляет , а не гарантируется . Это означает, что даже если вы попросили его поспать 10 мс, технически возможно, чтобы он не вернулся через 10 секунд (или, <<insert arbitrary time here>>