Čo je to čakať a informovať v Jave?



Čakanie a upozornenie v Jave sú dve posledné metódy, ktoré umožňujú vláknam navzájom komunikovať. Tento článok vám pomôže s podrobnosťami

funkcia v Jave umožňuje súčasné vykonávanie dvoch alebo viacerých častí programu. Každá časť je vlákno. Tieto vlákna musia často koordinovať svoje kroky. To sa deje pomocou niekoľkých posledných metód, ako napríklad Wait and Notify v Jave. Tento článok vám pomôže podrobne pochopiť tieto metódy.

Budem diskutovať o témach v tomto poradí:





Poďme začať!

Čo je synchronizácia vlákien?

Programy s viacerými vláknami môžu pravidelne prichádzať do situácie, keď sú viaceré pokúsiť sa dostať k rovnakému zdroju, ktorý prináša podvodné a prekvapivé výsledky. Niekedy sa môže pokúsiť získať prístup k zdieľanému prostriedku viac ako jedno vlákno, musíte sa ubezpečiť, že zdroj bude súčasne používať iba jedno vlákno. To je možné vykonať pomocou Synchronizácia v Jave.



Teraz hovoríme o hlasovaní. Anketa je proces opakovaného testovania stavu, kým nie je pravdivý. Táto metóda sa implementuje pomocou skontrolovať, či je konkrétna podmienka pravdivá alebo nie. Túto metódu môžete použiť pre vlákna, ale touto metódou zbytočne strácate veľa cyklov CPU robí proces implementácie veľmi neefektívnym. Aby sa zabránilo týmto druhom chýb, sú zavedené metódy ako Wait a Notify v Jave.

Čo sú metódy Wait () a Notify ()?

Na riešenie problému multithreadingu slúžia metódy ako Wait a Notify in sa používajú. Trieda Object používa tieto tri konečné metódy, ktoré umožňujú vláknam komunikovať o uzamknutom stave prostriedku. Oni sú tiež nazývaní ako strážené bloky.

čo je bufferedreader java

Počkajte ()

Táto metóda spôsobí, že vlákno počká, kým iné vlákno pre tento objekt nevyvolá metódy notify () a notifyAll (). Táto metóda Wait () povie volajúcemu vláknu, aby uvoľnilo zámok a prešlo do režimu spánku, kým nejaké iné vlákno nevstúpi na ten istý monitor a nezavolá oznámiť (). Táto metóda uvoľní zámok pred čakaním a znovu získa zámok pred návratom z metódy wait ().



Metóda Wait () je úzko integrovaná so synchronizačným zámkom. To sa deje pomocou funkcie, ktorá nie je k dispozícii priamo zo synchronizačného mechanizmu.

Syntax:

synchronized (lockObject) {while (! condition) {lockObject.wait ()} // tu vykonať akciu}

Aktuálne vlákno musí vlastniť monitor svojho objektu. Musí sa volať iba zo synchronizovanej metódy, inak vyvolá výnimku.

Upozorniť ()

Táto metóda sa používa na oznámenie že musí fungovať. Prebudí jedno vlákno, ktoré sa volá počkaj () metóda na rovnakom objekte.

Všimnite si, že volanie upozorniť () nakoniec sa nevzdá zámku. Povie čakajúcemu vláknu, že sa môže prebudiť. Zámky sa však v skutočnosti nevzdá, kým sa nedokončí synchronizovaný blok oznamovateľa. Teraz povedzte, ak voláte upozorniť () na zdroji, ale oznamovateľ stále musí vykonať akcie počas 10 sekúnd v rámci svojho synchronizovaného bloku, vlákno, ktoré čakalo, bude musieť počkať minimálne ďalších ďalších 10 sekúnd, kým oznamovateľ uvoľní zámok na objekte, aj keď upozorní () boli volané.

Syntax:

synchronized (lockObject) {// create_the_condition lockObject.notify () // prípadne ďalší kód}

NotifyAll ()

Táto metóda sa používa na prebudenie všetkých vlákien, ktoré volali wait () na rovnakom objekte. Vlákno s najvyššou prioritou sa najskôr spustí vo väčšine situácií, aj keď to nie je zaručené. Ostatné veci sú rovnaké ako metóda notify ().

Prečo a ako používať Java v Wait () a Notify ()?

Mali by ste použiť Wait and Notify in pretože súvisia so zámkom a objekt má zámok. Aj keď sú čakanie a upozornenie v Jave veľmi zásadný pojem, sú definované v trieda objektov . Napodiv nie je také ľahké napísať kód pomocou čakania a upozornenia. Môžete to otestovať napísaním kódu na vyriešenie problému výrobcu a spotrebiteľa pomocou čakania a upozornenia. Príklad výrobcu pre spotrebiteľa - Počkajte a informujte v jazyku Java-EdurekaTu mám zdieľanú Fronta adve vláknazavolal Výrobca a Spotrebiteľ . Výrobca vlákno vloží číslo do zdieľaného frontu a Spotrebiteľ vlákno spotrebúva čísla zo zdieľaného segmentu.

Podmienkou je, že akonáhle je položka vyrobená, musí sa na ňu upozorniť spotrebiteľské vlákno a podobne potom, ako je potrebné upozorniť vlákno výrobcu na spotrebu. Toto medzivláknokomunikáciaje dosiahnuté pomocou čakania a upozornenia v Jave.

Poznámka : W.ait a čmetódy tify sú definované v triede objektova musia byť vyvolané v synchronizovanom bloku.

Prí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 () {synchronizované (toto) {pre (int i = 0 i<=100 i++) { total += i } notify() }}}

Všimnite si, že vo vyššie uvedenom príklade je synchronizovaný objekt vlákna 2, teda b. Toto b dokončí výpočet skôr, ako hlavné vlákno vydá svoju celkovú hodnotu.

Výkon:

Týmto sa dostávame na koniec tohto článku, kde sme sa dozvedeli na čakanie a upozornenie v Jave.Dúfam, že vyššie uvedený obsah pomohol vylepšiť váš vedomosti. Čítajte ďalej, skúmajte ďalej!

Skontrolujte tiež autor: Edureka, dôveryhodná online vzdelávacia spoločnosť so sieťou viac ako 250 000 spokojných študentov rozmiestnených po celom svete. Výcvikový a certifikačný kurz Edureka Java J2EE a SOA je určený pre študentov a profesionálov, ktorí chcú byť vývojármi Java. Kurz je navrhnutý tak, aby vám dal náskok v programovaní v Jave a naučil vás základné aj pokročilé koncepty Javy spolu s rôznymi ako Hibernate & Spring.