Co je čekání a upozornění v Javě?



Čekat a upozorňovat v Javě jsou dvě konečné metody, které umožňují vláknům vzájemně komunikovat. Tento článek vám pomůže s podrobnostmi

funkce v Javě umožňuje souběžné provádění dvou nebo více částí programu. Každá část je vlákno. Tato vlákna musí často koordinovat své akce. To se provádí pomocí několika finálních metod, jako je Wait and Notify v Javě. Tento článek vám pomůže podrobně porozumět těmto metodám.

Budu diskutovat o tématech v následujícím pořadí:





Pojďme začít!

Co je synchronizace vláken?

Programy s více vlákny mohou pravidelně přicházet se situací, kdy je více pokusit se dostat ke stejnému zdroji, který vytváří podvodné a překvapivé výsledky. Někdy se může pokusit o přístup ke sdílenému prostředku více než jedno vlákno, musíte zajistit, aby byl prostředek používán pouze jedním vláknem najednou. To lze provést pomocí Synchronizace v Javě.



Nyní mluvíme o Pollingu. Polling je proces testování podmínky opakovaně, dokud není pravda. Tato metoda je implementována pomocí zkontrolovat, zda je konkrétní podmínka pravdivá nebo ne. Tuto metodu můžete použít pro vlákna, ale tato metoda plýtvá spoustou cyklů CPU a také činí proces implementace velmi neefektivním. Abychom se těmto druhům chyb vyhnuli, zavedeme metody jako Wait a Notify v Javě.

Co jsou metody Wait () a Notify ()?

K řešení problému s více vlákny použijte metody jako Wait and Notify in Jsou používány. Třída Object používá tyto tři konečné metody, které umožňují vláknům komunikovat o stavu uzamčení prostředku. Jsou také označovány jako hlídané bloky.

jak používat vznášet se v css

Počkejte()

Tato metoda způsobí, že vlákno počká, dokud jiné vlákno pro tento objekt nevyvolá metody notify () a notifyAll (). Tato metoda Wait () říká volajícímu vláknu, aby uvolnilo zámek a uspalo, dokud jiné vlákno nevstoupí na stejný monitor a nezavolá upozornit (). Tato metoda uvolní zámek před čekáním a znovu získá zámek před návratem z metody wait ().



Metoda Wait () je pevně integrována do zámku synchronizace. To se provádí pomocí funkce, která není k dispozici přímo z synchronizačního mechanismu.

Syntax:

synchronized (lockObject) {while (! condition) {lockObject.wait ()} // zde provést akci}

Aktuální vlákno musí vlastnit monitor svého objektu. Musí být volán pouze ze synchronizované metody, jinak vyvolá výjimku.

Oznámit()

Tato metoda se používá k oznámení že musí fungovat. Probudí jedno vlákno, které se jmenuje Počkejte() metoda na stejném objektu.

Všimněte si, že volání oznámit() nakonec se nevzdá zámku. Říká čekajícímu vláknu, že se může probudit. Zámku se však ve skutečnosti nevzdáme, dokud nedokončí synchronizovaný blok oznamovatele. Nyní řekněte, když voláte oznámit() na zdroji, ale oznamovatel stále potřebuje provádět akce po dobu 10 sekund v rámci svého synchronizovaného bloku, vlákno, které čekalo, bude muset počkat alespoň dalších dalších 10 sekund, než oznamovatel uvolní zámek na objektu, přestože upozorní () byl volán.

Syntax:

synchronized (lockObject) {// create_the_condition lockObject.notify () // případně další kód}

Upozornit vše ()

Tato metoda se používá k probuzení všech vláken, která volala wait () na stejném objektu. Vlákno s nejvyšší prioritou se nejprve spustí ve většině situací, i když není zaručeno. Jiné věci jsou stejné jako metoda oznámit ().

Proč a jak používat Wait () a Notify () v Javě?

Měli byste použít Wait and Notify in protože souvisí se zámkem a objekt má zámek. I když čekání a upozornění v Javě jsou docela zásadní koncept, jsou definovány v třída objektu . Překvapivě není tak snadné napsat kód pomocí čekání a upozornění. Můžete to otestovat tak, že napíšete kód, který vyřeší problém výrobce a spotřebitele pomocí čekání a upozornění. Příklad výrobce pro spotřebitele - Počkejte a informujte v jazyce Java-EdurekaTady mám sdílený Fronta advě vláknavolala Výrobce a Spotřebitel . Výrobce podproces vloží číslo do sdílené fronty a Spotřebitel vlákno spotřebovává čísla ze sdíleného segmentu.

Podmínkou je, že jakmile je položka vyrobena, musí být oznámeno spotřebitelské vlákno a podobně poté, co je třeba oznámit vlákno producenta spotřeby. Toto mezivláknosděleníje dosaženo pomocí čekání a upozornění v Javě.

Poznámka : W.ait a nemetody tify jsou definovány ve třídě objektůa musí být volány uvnitř synchronizovaného bloku.

Příklad

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 extends Thread1 {int total @Override public void run () {synchronized (this) {for (int i = 0 i<=100 i++) { total += i } notify() }}}

Všimněte si, že ve výše uvedeném příkladu je synchronizován objekt Thread2, tedy b. Toto b dokončí výpočet, než hlavní vlákno vydá svou celkovou hodnotu.

Výstup:

Tím se dostáváme na konec tohoto článku, kde jsme se naučili na čekání a upozornění v Javě.Doufám, že se výše uvedený obsah osvědčil při vylepšování vašeho znalost. Pokračujte ve čtení, pokračujte ve zkoumání!

Podívejte se také Edureka, důvěryhodná online vzdělávací společnost se sítí více než 250 000 spokojených studentů rozložených po celém světě. Školicí a certifikační kurz Edureka Java J2EE a SOA je určen pro studenty a profesionály, kteří chtějí být vývojářem Java. Kurz je navržen tak, aby vám poskytl náskok v programování Java a naučil vás základní i pokročilé koncepty Java spolu s různými jako Hibernate & Spring.