Mi a várakozás és értesítés a Java-ban?

A Várakozás és az Értesítés Java-ban két végső módszer, amely lehetővé teszi a szálak közötti kommunikációt. Ez a cikk segít a részletek megismerésében

A Java szolgáltatás lehetővé teszi a program két vagy több részének egyidejű végrehajtását. Minden rész egy szál. Ezeknek a szálaknak gyakran össze kell hangolniuk cselekedeteiket. Ez néhány végső módszerrel történik, például a Várakozás és az Értesítés Java-ban. Ez a cikk segít megérteni ezeket a módszereket részletesen.



A témákat a következő sorrendben fogom megvitatni:



Kezdjük!

Mi az a szál szinkronizálása?

A több szálon futó programok rendszeresen előállhatnak olyan helyzettel, amikor több megpróbál ugyanahhoz az erőforráshoz jutni, amely csalárd és megdöbbentő eredményeket hoz. Időnként több szál is megpróbál hozzáférni egy megosztott erőforráshoz. Biztosítania kell, hogy az erőforrást egyszerre csak egy szál használja. Ez megtehető a Szinkronizálás Java-ban.



Most a szavazásról beszélünk. A közvélemény-kutatás egy feltétel többszöri tesztelésének folyamata, amíg igaz lesz. Ezt a módszert a annak ellenőrzése, hogy egy adott feltétel igaz-e vagy sem. Használhatja ezt a módszert szálakhoz, de ez a módszer sok CPU-ciklust is pazarol és a végrehajtási folyamatot nagyon hatékonnyá teszi. Az ilyen típusú hibák elkerülése érdekében olyan módszereket vezetnek be, mint a Wait and Notify in Java.

Mik a Wait () és az Notify () módszerek?

A többszálas probléma megoldásához olyan módszerek, mint a Wait and Notify in használt. Az Object osztály ezt a három utolsó módszert használja, amelyek lehetővé teszik a szálak számára, hogy kommunikáljanak egy erőforrás zárolt állapotáról. Őrzött blokkoknak is nevezik őket.

szolgáltatás most jegyértékesítő oktatóanyag

Várjon()

Ez a módszer arra készteti a szálat, hogy megvárja, amíg egy másik szál meghívja az értesítés () és az ÉrtesítésAll () metódusokat ehhez az objektumhoz. Ez a Wait () metódus megmondja a hívó szálnak, hogy engedjen el egy zárat, és aludjon, amíg más szál belép ugyanabba a monitorba, és felhívja az értesítést (). Ez a módszer várakozás előtt felszabadítja a zárat, és a várakozás () metódusból való visszatérés előtt újra megszerzi a zárat.



A Wait () metódus szorosan integrálva van a szinkronizálási zárral. Ez egy olyan szolgáltatás használatával történik, amely nem érhető el közvetlenül a szinkronizálási mechanizmusból.

Szintaxis:

szinkronizált (lockObject) {while (! condition) {lockObject.wait ()} // hajtsa végre a műveletet itt}

Az aktuális szálnak az objektum monitorának kell lennie. Csak a szinkronizált módszerből kell meghívni, különben kivételt hoz.

Értesítés ()

Ezt a módszert használják a hogy működnie kell. Felébreszt egy szálat, amely a várjon() módszer ugyanazon az objektumon.

Ne feledje, hogy hív értesít () végül nem ad fel egy zárat. Azt mondja egy várakozó szálnak, hogy felébredhet. A zárolásról azonban valójában addig nem adnak fel, amíg a bejelentő szinkronizált mondata nem fejeződik be. Most mondd, ha hívsz értesít () egy erőforráson, de a bejelentőnek még mindig 10 másodpercig kell végrehajtania a műveleteket a szinkronizált blokkon belül, a várakozó szálnak legalább további 10 másodpercet kell várnia, amíg a bejelentő felszabadítja az objektum zárját, annak ellenére, hogy értesítést küld () hívták.

Szintaxis:

szinkronizált (lockObject) {// létrehozza a feltétel feltételét lockObject.notify () // szükség esetén további kódokat}

NotifyAll ()

Ezzel a módszerrel fel lehet kelteni az összes szálat, amelyek ugyanazon az objektumon hívták a wait () -t. A legmagasabb prioritású szál először a legtöbb esetben fut, annak ellenére, hogy nem garantált. Más dolgok megegyeznek az értesítési () módszerrel.

Miért és hogyan kell használni a Wait () és az Notify () Java-ban?

Használja a Várakozás és Értesítés alkalmazást mert kapcsolatban vannak a zárral és az objektumnak van zárja. Annak ellenére, hogy a Java-ban történő várakozás és értesítés meglehetősen alapvető fogalom, ezeket a objektum osztály . Meglepő módon nem olyan egyszerű a kód megírása a várakozás és értesítés használatával. Kipróbálhatja ezt a kód megírásával, hogy megoldja a gyártó-fogyasztó problémát a várakozás és értesítés használatával. Gyártói fogyasztói példa - Várjon és értesítsen a Java-Edureka alkalmazásbanItt van egy közös Sor éskét szálhívott Termelő és Fogyasztó . Termelő szál a számot megosztott sorba helyezi, és Fogyasztó szál elfogyasztja a számokat a megosztott vödörből.

A feltétel az, hogy amint egy terméket gyártanak, értesíteni kell a fogyasztói szálat, és hasonlóan, miután a fogyasztói gyártói szálat is értesíteni kell. Ez az inter-szálkommunikációvárakozás és értesítés Java-ban érhető el.

jegyzet : W.ait és NoA tify módszereket az objektumosztály határozza meg, és ezeket szinkronizált blokkon belül kell meghívni.

Példa

public class Thread1 {public static void main (String [] args) {Thread2 b = new Thread2 () b.start () synchronized (b) {try {System.out.println ('Várakozás a 2-es befejezésére ...' ) b.wait ()} catch (InterruptedException e) {e.printStackTrace ()} System.out.println ('Total is:' + b.total)}}}} A Thread2 osztály kiterjeszti Thread1-t {int total @Override public void () {szinkronizált (ez) {for (int i = 0 i<=100 i++) { total += i } notify() }}}

Vegye figyelembe, hogy a fenti példában a Thread2 objektuma, azaz b, szinkronizálva van. Ez a b befejezi a számítást, mielőtt a Fő szál kiadná teljes értékét.

Kimenet:

Ezzel a cikk végére jutunk, ahol megtanultuk a a Várakozás és értesítés Java-ban.Remélem, hogy a fent említett tartalom hasznosnak bizonyult a tudás. Olvass tovább, fedezd tovább!

Nézze meg is az Edureka, egy megbízható online tanulási vállalat, amelynek több mint 250 000 elégedett tanulóval rendelkező hálózata elterjedt az egész világon. Az Edureka Java J2EE és SOA képzési és tanúsítási tanfolyamát olyan hallgatók és szakemberek számára tervezték, akik Java fejlesztők szeretnének lenni. A tanfolyamot úgy tervezték, hogy előrelépést nyújtson a Java programozásban, és kiképezzen mind az alapvető, mind a fejlett Java-koncepciókra a különféle megoldásokkal együtt mint a Hibernate & Spring.