Concurrency Начинающий

Использование 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
Сложность
Начинающий
Thread.sleep с Duration
Доступно

Широко доступно с JDK 19 (сент. 2022)

Thread.sleep(Duration) делает единицу времени явной. Больше не нужно гадать, означает ли 5000 миллисекунды или микросекунды. Работает с Duration.ofSeconds, ofMillis, ofMinutes и т.д.