Что такое ожидание и уведомление в Java?



Ожидание и уведомление в Java - это два последних метода, которые позволяют потокам взаимодействовать друг с другом. Эта статья поможет вам с деталями

Функция в Java позволяет одновременно выполнять две или более частей программы. Каждая часть - это поток. Этим потокам часто приходится координировать свои действия. Это делается с помощью нескольких финальных методов, таких как Wait и Notify в Java. Эта статья поможет вам подробно разобраться в этих методах.

Я буду обсуждать темы в следующем порядке:





Давайте начнем!

Что такое синхронизация потоков?

Многопоточные программы могут регулярно сталкиваться с ситуацией, когда несколько попытаться добраться до того же ресурса, который дает мошеннические и поразительные результаты. Иногда более одного потока могут пытаться получить доступ к общему ресурсу, вам необходимо убедиться, что ресурс будет использоваться только одним потоком за раз. Это можно сделать с помощью Синхронизация в Java.



Теперь поговорим об опросе. Опрос - это процесс многократной проверки условия до тех пор, пока оно не станет истинным. Этот метод реализован с помощью чтобы проверить, истинно ли то или иное условие. Вы можете использовать этот метод для потоков, но этот метод тратит много циклов процессора, а также делает процесс внедрения очень неэффективным. Чтобы избежать подобных ошибок, в Java представлены такие методы, как Wait и Notify.

Что такое методы Wait () и Notify ()?

Чтобы решить проблему многопоточности, такие методы, как Wait и Notify в используются. Класс Object использует эти три последних метода, которые позволяют потокам сообщать о заблокированном состоянии ресурса. Их также называют охраняемыми блоками.

как использовать наведение в css

Подождите()

Этот метод заставляет поток ждать, пока другой поток не вызовет методы notify () и notifyAll () для этого объекта. Этот метод Wait () сообщает вызывающему потоку, чтобы он снял блокировку и перешел в спящий режим, пока какой-либо другой поток не войдет в тот же монитор и не вызовет notify (). Этот метод снимает блокировку перед ожиданием и повторно получает блокировку перед возвратом из метода wait ().



Метод Wait () тесно интегрирован с блокировкой синхронизации. Это делается с помощью функции, недоступной непосредственно из механизма синхронизации.

Синтаксис:

synchronized (lockObject) {while (! condition) {lockObject.wait ()} // выполнить действие здесь}

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

Уведомлять()

Этот метод используется для уведомления что он должен функционировать. Пробуждает один поток, который вызвал Подождите() метод на том же объекте.

Обратите внимание, что вызов уведомлять() со временем не отказывается от блокировки. Он сообщает ожидающему потоку, что он может проснуться. Однако блокировка не снимается до тех пор, пока не завершится синхронизация блока уведомителя. Теперь скажи, если ты позвонишь уведомлять() на ресурсе, но уведомителю по-прежнему необходимо выполнять действия в течение 10 секунд в своем синхронизированном блоке, поток, который ожидал, должен будет подождать еще как минимум еще 10 секунд, чтобы уведомитель снял блокировку объекта, даже если уведомить () был вызван.

Синтаксис:

synchronized (lockObject) {// install_the_condition lockObject.notify () // любой дополнительный код при необходимости}

NotifyAll ()

Этот метод используется для пробуждения всех потоков, которые вызвали wait () для одного и того же объекта. В большинстве случаев поток с наивысшим приоритетом сначала запускается, даже если это не гарантируется. В остальном такие же, как у метода notify ().

Почему и как использовать Wait () и Notify () в Java?

Вы должны использовать Wait и Notify в потому что они связаны с блокировкой, а объект имеет блокировку. Несмотря на то, что ожидание и уведомление в Java являются довольно фундаментальной концепцией, они определены в класс объекта . Удивительно, но написать код с помощью функции ожидания и уведомления не так-то просто. Вы можете проверить это, написав код для решения проблемы производителя-потребителя с помощью функции ожидания и уведомления. Пример потребителя производителя - ожидание и уведомление в Java-EdurekaЗдесь у меня есть общий Очередь идве нитиназывается Режиссер и Потребитель . Режиссер поток помещает номер в общую очередь и Потребитель поток потребляет числа из общей корзины.

Условие состоит в том, что после создания элемента потребительский поток должен быть уведомлен, и аналогично, после того, как поток производителя потребления должен быть уведомлен. Этот межпоточныйобщениедостигается с помощью ожидания и уведомления в Java.

Заметка : W.айт и нетметоды tify определены в классе объекта, и они должны вызываться внутри синхронизированного блока.

пример

public class Thread1 {public static void main (String [] args) {Thread2 b = new Thread2 () b.start () synchronized (b) {try {System.out.println ('Waiting for 2 to complete ...' ) b.wait ()} catch (InterruptedException e) {e.printStackTrace ()} System.out.println ('Total is:' + b.total)}}} class Thread2 расширяет Thread1 {int total @Override public void run () {синхронизировано (это) {for (int i = 0 i<=100 i++) { total += i } notify() }}}

Обратите внимание, что в приведенном выше примере объект Thread2, то есть b, синхронизирован. Этот b завершает вычисление до того, как основной поток выведет свое общее значение.

Вывод:

Это подводит нас к концу статьи, где мы узнали о о ожидании и уведомлении в Java.Я надеюсь, что вышеупомянутый контент оказался полезным для улучшения вашего знания. Продолжайте читать, продолжайте исследовать!

Также проверьте от Edureka, надежной компании по онлайн-обучению с сетью из более чем 250 000 довольных учащихся по всему миру. Курс обучения и сертификации по Java J2EE и SOA от Edureka предназначен для студентов и профессионалов, которые хотят стать Java-разработчиками. Курс разработан, чтобы дать вам хорошее начало в программировании на Java и обучить вас основным и продвинутым концепциям Java, а также различным как Hibernate и Spring.