wait() — это метод уровня Object, а sleep() — это статический метод класса Thread. Это фундаментальное отличие влияет на то, как каждый метод работает в конкурентных программах.
Ключевая разница в том, как эти методы работают с блокировками:
wait() может быть прервано другим потоком:
notify() или notifyAll() на том же объекте монитора, чтобы разбудить ожидающий потокsleep() не может быть прервано извне:
wait() и notify() должны вызываться внутри одного блока synchronized на объекте монитора:
synchronized(monitor) {
monitor.wait(); // освобождает блокировку
monitor.notify(); // будит ожидающий поток
}
sleep() не требует синхронизации и может быть вызван где угодно.
Если коротко: wait() — для межпоточного взаимодействия с освобождением блокировки, а sleep() — для паузы по таймеру с сохранением блокировок.
Метод wait() освобождает блокировку монитора перед входом в состояние ожидания, позволяя другим потокам захватить блокировку, в то время как sleep() сохраняет все блокировки, удерживаемые текущим потоком.
Новый — ещё не проверен сообществом
Вы