В Java есть несколько методов для выполнения определенных действий.
Метод — это группа кода, которая запускается только при вызове; и может или не может вернуть результат.
Для многопоточности используются такие методы, как сон и ожидание. Оба они приостанавливают работу и отправляют поток в режим ожидания, но имеют существенные различия в функционировании.
Основные выводы
- «Сон» — это состояние покоя, при котором тело и разум бездействуют, а «Ждать» — оставаться на одном месте или откладывать действие до наступления определенного события.
- «Сон» — естественная и необходимая функция организма, а «Ждать» — произвольное действие, которое можно выбрать или избежать.
- «Сон» ассоциируется с ночным временем, а «Ожидание» может наступить в любое время суток.
Сон против ожидания
Разница между методами sleep() и wait() заключается в том, что метод sleep() используется в программе для приостановки выполнения текущего потока на определенный период времени, а метод wait() используется в программе для приостановки. или приостановить текущий поток, пока не будут вызваны определенные методы.

Во время использования метода сна текущий поток не теряет право собственности на монитор.
Sleep — это статический метод, являющийся частью потока класса. По истечении времени ожидания поток возвращается в исходное работоспособное состояние.
Это обеспечивает полное использование ЦП во время ожидания.
В то время как метод wait() используется в программе Java, чтобы приказать текущему потоку ждать, пока для этого объекта не будет вызван другой поток.
Затем поток продолжает выполнение, как только он получает контроль над монитором.
Это не статический метод, в отличие от сна, и он является частью класса объекта.
Сравнительная таблица
Параметры сравнения | Размещение | Подожди |
---|---|---|
Класс | Метод сна является частью класса потока. | Метод ожидания является частью класса объекта |
Тип метода | Сон — это статический метод | Wait не является статическим методом |
Техника вызова | Метод sleep может быть вызван из-за пределов синхронизированного контекста. | Метод ожидания может быть вызван только из синхронизированного контекста. |
Разблокировка замка | Метод сна не снимает блокировку объекта в течение указанного времени ожидания во время синхронизации. | Метод ожидания снимает блокировку объекта, чтобы иметь возможность выполнить его во время синхронизации. |
Декларация | общедоступный статический недействительный сон () | публичный окончательный недействительный ожидание () |
Что такое сон?
Поток sleep() — это статический метод в программе Java, который приостанавливает текущий поток и переводит его в состояние ожидания на заданный период времени.
По истечении состояния ожидания и времени состояние потока изменяется на состояние готовности к выполнению. А затем ждет ЦП для дальнейшего выполнения.
Целью этого метода является создание задержки в программе на несколько секунд и одновременно максимальное использование ЦП.
Если система занята или перегружена, то время ожидания или паузы больше, в противном случае оно было бы меньше или равно фактическому времени.
Можно сказать, что возвращаемый тип метода сна недействителен, так как он не возвращает никакого значения.
Спящий поток не теряет монитор и не блокирует уже полученный поток.
Если в любом случае сон будет нарушен, поток выдаст Interrupted_Exception.
Фактическая продолжительность сна потока зависит от планировщиков и системных таймеров, которые являются частью операционной системы.
Синтаксис метода сна: public static void sleep(длинные миллисекунды)
общедоступный статический недействительный сон (длинные миллисекунды, целые наносекунды)
Здесь миллисекунды и наносекунды — это время, в течение которого поток будет спать.

Что такое ждать?
Wait() — это метод, используемый для связи между потоками.
Всякий раз, когда используется поток wait(), вызывающий или текущий поток приостанавливается и приостанавливается до тех пор, пока в системе не будут вызваны такие методы, как notify() или notifyAll().
Метод notify() разбудит указанные потоки, в то время как метод notifyAll() применим для каждого потока.
При синхронизации метод ожидания снимает блокировку с ресурсов.
У метода Wait нет возвращаемого значения, поэтому можно сказать, что он возвращает void.
Двумя исключениями метода Wait являются Interrupted_Exception (когда текущий поток прерывается во время его ожидания) и IllegalMonitorStateException (когда текущий поток не является владельцем объекта на мониторе).
Метод Wait является частью класса объекта. Метод применим только и может быть вызван через синхронизированный блок.
Метод ожидания освобождает приостановленный или заблокированный экран во время синхронизации.
А метод Wait исключительно позволяет синхронизированным нескольким потокам обращаться к одному и тому же объекту один за другим.
Синтаксис метода ожидания: public final void wait()

Основные различия между сном и ожиданием
- Метод Sleep переводит поток в спящий режим на заданный и конкретный период времени, в течение указанного времени ожидания, если не истек срок его действия или не прерывается, тогда как метод Wait переводит поток в спящий режим до тех пор, пока не будут вызваны такие методы, как notify() или notifyAll().
- Метод Sleep выполняется в потоке, а метод Wait выполняется в объекте.
- Метод Sleep используется для синхронизации времени, а метод Wait используется для синхронизации нескольких потоков.
- Во время потока ожидания синхронизированные несколько потоков могут обращаться к одному и тому же объекту по соседству, в то время как в потоке ожидания синхронизированные несколько потоков должны ждать, пока сон текущего потока не прекратится.
- Метод Wait освобождает блокировку или монитор, а метод Sleep не освобождает монитор во время сна или ожидания текущего потока.
