Сон против ожидания: разница и сравнение

В Java есть несколько методов для выполнения определенных действий.

Метод — это группа кода, которая запускается только при вызове; и может или не может вернуть результат.

Для многопоточности используются такие методы, как сон и ожидание. Оба они приостанавливают работу и отправляют поток в режим ожидания, но имеют существенные различия в функционировании.

Основные выводы

  1. «Сон» — это состояние покоя, при котором тело и разум бездействуют, а «Ждать» — оставаться на одном месте или откладывать действие до наступления определенного события.
  2. «Сон» — естественная и необходимая функция организма, а «Ждать» — произвольное действие, которое можно выбрать или избежать.
  3. «Сон» ассоциируется с ночным временем, а «Ожидание» может наступить в любое время суток.

Сон против ожидания

Разница между методами 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()

ждать

Основные различия между сном и ожиданием

  1. Метод Sleep переводит поток в спящий режим на заданный и конкретный период времени, в течение указанного времени ожидания, если не истек срок его действия или не прерывается, тогда как метод Wait переводит поток в спящий режим до тех пор, пока не будут вызваны такие методы, как notify() или notifyAll().
  2. Метод Sleep выполняется в потоке, а метод Wait выполняется в объекте.
  3. Метод Sleep используется для синхронизации времени, а метод Wait используется для синхронизации нескольких потоков.
  4. Во время потока ожидания синхронизированные несколько потоков могут обращаться к одному и тому же объекту по соседству, в то время как в потоке ожидания синхронизированные несколько потоков должны ждать, пока сон текущего потока не прекратится.
  5. Метод Wait освобождает блокировку или монитор, а метод Sleep не освобождает монитор во время сна или ожидания текущего потока.
Разница между X и Y 2023 05 10T161359.507
Рекомендации
  1. https://pdfs.semanticscholar.org/51fd/24ae444910fd39b117bb3044a12591f038fa.pdf
  2. https://dl.acm.org/doi/pdf/10.1145/289524.289572
Читайте также:  WeVideo против Filmora: разница и сравнение

Один запрос?

Я приложил столько усилий, чтобы написать этот пост в блоге, чтобы предоставить вам ценность. Это будет очень полезно для меня, если вы подумаете о том, чтобы поделиться им в социальных сетях или со своими друзьями/родными. ДЕЛИТЬСЯ ♥️

Хотите сохранить эту статью на потом? Нажмите на сердечко в правом нижнем углу, чтобы сохранить в свой собственный блок статей!

Об авторе

Чара Ядав имеет степень магистра делового администрирования в области финансов. Ее цель — упростить темы, связанные с финансами. Она работает в сфере финансов около 25 лет. Она провела несколько курсов по финансам и банковскому делу для бизнес-школ и сообществ. Подробнее у нее био страница.