Ответ
В Java есть несколько способов приостановить выполнение потока на заданное время.
Основные методы:
-
Thread.sleep(long millis)- Статический метод, приостанавливает текущий поток.
- Может выбросить
InterruptedException, который нужно обработать.try { // Пауза на 2 секунды Thread.sleep(2000); } catch (InterruptedException e) { Thread.currentThread().interrupt(); // Восстановление флага прерывания // Обработка прерывания }
-
TimeUnit(более читаемая альтернатива)TimeUnit.SECONDS.sleep(2); // Читаемо: "спать 2 секунды" -
Object.wait()- Используется для межпоточного взаимодействия. Поток освобождает монитор и ждёт, пока другой поток вызовет
notify()/notifyAll()на том же объекте. - Всегда должен вызываться внутри synchronized-блока.
- Используется для межпоточного взаимодействия. Поток освобождает монитор и ждёт, пока другой поток вызовет
| Важные различия: | Метод | Освобождает монитор? | Пробуждается по... |
|---|---|---|---|
Thread.sleep() |
Нет | Истечению времени или прерыванию | |
Object.wait() |
Да | notify()/notifyAll() или прерыванию |
Для отложенного выполнения задач используйте ScheduledExecutorService.