👩💻 5 отличий между методами wait() и sleep()
Хотя и метод
wait(), и метод
sleep() можно использовать для приостановки потока, между ними существует разница, о которой вы скоро узнаете.
1. Синхронизированный контекстМетод
wait() должен вызываться из синхронизированного контекста
(может быть синхронизированным блоком или методом), тогда как метод
sleep() может быть вызван из синхронизированного блока без него.
2. Снятие блокировкиКогда вы вызываете метод
wait(), поток снимает блокировку, которую он удерживал. А вот после вызова метода
sleep() поток продолжает удерживать блокировку.
3. ПробуждениеПоток, вызвавший
wait(), может быть разбужен (woken up) другими потоками с помощью вызова методов
notify() и
notifyAll(). При этом спящий поток не может быть разбужен другим потоком до истечения времени ожидания, но другой поток всегда может прервать спящий поток.
4. Различия в вызовеСамое важное различие между методами
wait() и
sleep() заключается в том, что вы вызываете
wait() для объектов, то есть монитора, а метод
sleep() вызывается для Thread.
5. СостояниеПосле вызова метода
wait() поток переходит в состояние WAITING, а после вызова метода
sleep() поток переходит в состояние TIMED_WAITING.
❕В перечисленных выше причинах и заключается разница между методами wait() и sleep() в Java. Как я уже сказал, sleep() — это самый простой способ перевести поток в спящий режим на ограниченное время, тогда как wait() — это более сложный способ взаимодействия между потоками в Java.
70🏆 — и выпускаю следующий пост➡️ Java Developer | #обучение