Хотя и метод
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 | #обучение
