Какво е Wait and Notify в Java?



Wait и Notify в Java са двата последни метода, които позволяват на нишките да комуникират помежду си. Тази статия ще ви помогне с подробностите

функция в Java позволява едновременно изпълнение на две или повече части на програма. Всяка част е нишка. Тези нишки често трябва да координират своите действия. Това се прави с помощта на няколко финални метода като Wait и Notify в Java. Тази статия ще ви помогне да разберете подробно тези методи.

Ще обсъждам темите в следния ред:





Нека да започнем!

Какво е синхронизация на нишки?

Многонишковите програми могат редовно да измислят ситуация, при която множество опитайте се да стигнете до същия ресурс, който води до измамни и стряскащи резултати. Понякога повече от една нишка може да се опита да осъществи достъп до споделен ресурс, трябва да се уверите, че ресурсът ще се използва само от една нишка наведнъж. Това може да стане с помощта на Синхронизация в Java.



Сега говорим за анкетиране. Анкетирането е процес на многократно тестване на условие, докато то е истина. Този метод е реализиран с помощта на за да проверите дали дадено условие е вярно или не. Можете да използвате този метод за нишки, но този метод също губи много цикли на процесора прави процеса на изпълнение много неефективен. За да се избегнат тези видове грешки, се въвеждат методи като Wait и Notify в Java.

Какво представляват методите Wait () и Notify ()?

За да се справите с проблема с многопоточност, използвайте методи като Изчакайте и Уведомете са използвани. Класът Object използва тези три окончателни метода, които позволяват на нишките да комуникират за състоянието на заключен ресурс. Те също са наричани охранявани блокове.

услуга сега билет инструмент урок

Изчакайте()

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



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

Синтаксис:

синхронизиран (lockObject) {while (! condition) {lockObject.wait ()} // предприемете действието тук}

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

Известяване ()

Този метод се използва за уведомяване на че трябва да функционира. Събужда една нишка, наречена изчакайте() метод за същия обект.

Имайте предвид, че обаждането уведоми () в крайна сметка не се отказва от ключалка. Той казва на чакаща нишка, че може да се събуди. Заключването обаче всъщност не се отказва, докато синхронизираният блок на уведомителя не завърши. Сега кажете, ако се обадите уведоми () на ресурс, но уведомяващият все още трябва да изпълнява действия за 10 секунди в синхронизирания си блок, нишката, която е чакала, ще трябва да изчака поне още 10 допълнителни секунди, за да извести уведомителят да освободи заключването на обекта, въпреки че уведомява () беше извикан.

Синтаксис:

синхронизиран (lockObject) {// установи_условието lockObject.notify () // всеки допълнителен код, ако е необходимо}

NotifyAll ()

Този метод се използва за събуждане на всички нишки, които са извикали wait () на същия обект. Нишката с най-висок приоритет ще се изпълни първо в по-голямата част от ситуацията, въпреки че не е гарантирана. Други неща са същите като метода notify ().

Защо и как да използвам Wait () и Notify () в Java?

Трябва да използвате Изчакване и Уведомяване в защото те са свързани със заключване и обектът има заключване. Въпреки че изчакването и известяването в Java са доста фундаментална концепция, те са дефинирани в обект клас . Изненадващо, не е толкова лесно да напишете кода, като използвате изчакване и уведомяване. Можете да тествате това, като напишете код, за да разрешите проблема производител-потребител, като използвате изчакване и уведомяване. Пример за потребител на производителя - Изчакайте и уведомете в Java-EdurekaЕто, имам споделено Опашка идве нишкиНаречен Продуцент и Консуматор . Продуцент thread поставя номера в споделена опашка и Консуматор thread консумира числата от споделената група.

Условието е, че след като елементът е произведен, потребителската нишка трябва да бъде уведомена и по подобен начин, след като потребителската нишка производител трябва да бъде уведомена. Тази междунишкакомуникациясе постига чрез изчакване и уведомяване в Java.

Забележка : W.ait и Noметодите tify са дефинирани в обектния клас, и те трябва да бъдат извикани в синхронизиран блок.

Пример

публичен клас Thread1 {public static void main (String [] args) {Thread2 b = new Thread2 () b.start () synchronized (b) {try {System.out.println ('Изчаква се 2 да завърши ...' ) b.wait ()} catch (InterruptedException e) {e.printStackTrace ()} System.out.println ('Общо е:' + b.total)}}} клас Thread2 разширява Thread1 {int total @Override public void run () {синхронизирано (това) {за (int i = 0 i<=100 i++) { total += i } notify() }}}

Забележете, че в горния пример обект на Thread2, който е b, се синхронизира. Това b завършва изчислението, преди основната нишка да изведе общата си стойност.

Изход:

Това ни води до края на тази статия, където научихме на Изчакайте и уведомете в Java.Надявам се, че гореспоменатото съдържание се оказа полезно за подобряване на вашето знания. Продължавайте да четете, продължавайте да проучвате!

Също така проверете от Edureka, доверена компания за онлайн обучение с мрежа от над 250 000 доволни учащи, разпространени по целия свят. Курсът за обучение и сертифициране на Java J2EE и SOA на Edureka е предназначен за студенти и професионалисти, които искат да бъдат Java Developer. Курсът е предназначен да ви даде начален старт в програмирането на Java и да ви обучи както за основни, така и за разширени Java концепции, заедно с различни като Hibernate & Spring.