Thread.sleep с Duration
Использование Duration для самодокументирующихся временных значений.
Сравнение кода
✕ Java 8
// What unit is 5000? ms? us? Thread.sleep(5000); // 2.5 seconds: math required Thread.sleep(2500);
✓ Java 19+
Thread.sleep(
Duration.ofSeconds(5)
);
Thread.sleep(
Duration.ofMillis(2500)
);
Заметили проблему в этом коде? Сообщите нам.
Почему современный подход лучше
Самодокументирующийся
Duration.ofSeconds(5) не вызывает двусмысленности.
Безопасность единиц
Нет случайной передачи микросекунд вместо миллисекунд.
Компонуемый
Арифметика Duration: plus(), multipliedBy() и т.д.
Старый подход
Миллисекунды
Современный подход
Duration
Начиная с JDK
19
Сложность
Начинающий
Поддержка JDK
Thread.sleep с Duration
Доступно
Широко доступно с JDK 19 (сент. 2022)
Как это работает
Thread.sleep(Duration) делает единицу времени явной. Больше не нужно гадать, означает ли 5000 миллисекунды или микросекунды. Работает с Duration.ofSeconds, ofMillis, ofMinutes и т.д.
Связанная документация
Доказательство