В 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 не освобождает монитор во время сна или ожидания текущего потока.
- https://pdfs.semanticscholar.org/51fd/24ae444910fd39b117bb3044a12591f038fa.pdf
- https://dl.acm.org/doi/pdf/10.1145/289524.289572
Последнее обновление: 31 июля 2023 г.
Сандип Бхандари имеет степень бакалавра вычислительной техники Университета Тапар (2006 г.). Имеет 20-летний опыт работы в сфере технологий. Он проявляет большой интерес к различным техническим областям, включая системы баз данных, компьютерные сети и программирование. Подробнее о нем можно прочитать на его био страница.
В статье эффективно разъясняются различия между методами сна и ожидания, обеспечивая четкое и краткое сравнение. Подробности синхронизации и снятия блокировки особенно полезны.
В статье отлично описаны различия между методами сна и ожидания. Информация о синхронизации и снятии блокировки представлена ясно и точно.
Подробное объяснение методов сна и ожидания превосходно. Эта статья является ценным ресурсом для всех, кто хочет улучшить понимание этих фундаментальных концепций Java.
Это всестороннее сравнение методов сна и ожидания в Java. В статье четко обозначены ключевые различия и представлена полезная сравнительная таблица для справки.
Подробное описание методов сна и ожидания очень полезно. Полезно понимать нюансы и функциональные возможности этих методов в программировании на Java.
Я нашел объяснение методов сна и ожидания информативным и точным. Сравнительная таблица особенно полезна для обобщения контрастирующих особенностей этих методов.
В статье проводится тщательное сравнение методов сна и ожидания в Java. Я ценю подробные объяснения, которые дают ценную информацию об их функциях.
Я нашел статью информативной и хорошо составленной. Объяснения методов сна и ожидания способствуют лучшему пониманию их использования и значения в Java.
В статье представлено подробное сравнение методов ожидания и ожидания, дающее исчерпывающее представление об их поведении и функциях в программировании на Java.
Эта статья — ценный ресурс для понимания методов сна и ожидания в Java. Объяснения подробные, а сравнительная таблица представляет собой удобную справочную информацию для понимания различий между этими методами.
Я разделяю то же мнение, Вморган. Сравнительная таблица дает четкое представление о различиях, а подробные описания улучшают понимание методов сна и ожидания.
Спасибо за статью. Я ценю подробное объяснение различий между методами сна и ожидания. Хорошо иметь четкое представление о том, как они функционируют в программе Java.
Ваше объяснение концепции очень хорошо структурировано и легко для понимания. Я согласен, что крайне важно иметь ясность в отношении этих фундаментальных методов.
В этой статье подробно объяснено различие между методами сна и ожидания. Я нашел объяснение поведения метода ожидания во время синхронизации особенно показательным.
Согласен, Фрейя. В статье дается четкое и точное объяснение поведения метода ожидания, что упрощает понимание его функциональности в Java.
Описание в статье поведения и типов возврата методов сна и ожидания очень информативно. Понимание этих различий необходимо для эффективной многопоточности в Java.
Я нашел статью очень информативной и познавательной. Углубленный анализ методов сна и ожидания во многом способствует пониманию их нюансов и последствий в Java.
В статье представлен всесторонний анализ методов сна и ожидания в Java. Объяснения хорошо организованы и во многом способствуют более глубокому пониманию этих фундаментальных методов.