Как реализовать задержку (паузу) выполнения в Java?

«Как реализовать задержку (паузу) выполнения в Java?» — вопрос из категории Софт-скиллы, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый пример ответа, который можно адаптировать под свой опыт.

Ответ

В Java есть несколько способов приостановить выполнение потока на заданное время.

Основные методы:

  1. Thread.sleep(long millis)

    • Статический метод, приостанавливает текущий поток.
    • Может выбросить InterruptedException, который нужно обработать.
      try {
      // Пауза на 2 секунды
      Thread.sleep(2000);
      } catch (InterruptedException e) {
      Thread.currentThread().interrupt(); // Восстановление флага прерывания
      // Обработка прерывания
      }
  2. TimeUnit (более читаемая альтернатива)

    TimeUnit.SECONDS.sleep(2); // Читаемо: "спать 2 секунды"
  3. Object.wait()

    • Используется для межпоточного взаимодействия. Поток освобождает монитор и ждёт, пока другой поток вызовет notify()/notifyAll() на том же объекте.
    • Всегда должен вызываться внутри synchronized-блока.
Важные различия: Метод Освобождает монитор? Пробуждается по...
Thread.sleep() Нет Истечению времени или прерыванию
Object.wait() Да notify()/notifyAll() или прерыванию

Для отложенного выполнения задач используйте ScheduledExecutorService.