Különbség az alvás és a várakozás között Java nyelven

Tartalomjegyzék:

Különbség az alvás és a várakozás között Java nyelven
Különbség az alvás és a várakozás között Java nyelven

Videó: Különbség az alvás és a várakozás között Java nyelven

Videó: Különbség az alvás és a várakozás között Java nyelven
Videó: What is difference between sleep, yield and wait method ? || Java Concurrency Interview Question 2024, November
Anonim

Kiemelt különbség – alvás és várakozás Java-ban

Az alvás és a várakozás két olyan módszer, amelyet a Java többszálú kezeléséhez használnak. Az alvás metódus a Thread osztályhoz tartozik, míg a várakozás metódus az Object osztályhoz tartozik. A Java-ban az alvás és a várakozás közötti fő különbség az, hogy az alvás funkció az aktuális szál végrehajtásának felfüggesztésére szolgál a megadott számú ezredmásodpercig, míg a várakozás metódus arra készteti az aktuális szálat, hogy megvárja, amíg egy másik szál meghívja az értesítést vagy notifyAll metódus az objektumhoz.

A szál az operációs rendszer legkisebb feldolgozási egysége. Ez egyetlen szekvenciális vezérlési folyamat egy programon belül. A szálak könnyűek. A többszálú eljárás több szál egyidejű futtatásának mechanizmusa. Az olyan programozási nyelvek, mint a Java, támogatják a többszálú feldolgozást. A többszálú kezelésnek előnyei vannak, mivel lehetővé teszi több szál egyidejű futtatását, és a szálak függetlenek egymástól. A Java-ban vannak olyan metódusok, amelyek többszálú feldolgozásra használhatók. Közülük ketten alszanak és várnak.

Mi az alvás a Java nyelven?

Egy operációs rendszerben több folyamat is fut. A folyamat egy futó program. Minden folyamatnak több szála lehet, és kontextusváltás történik e szálak között. Java nyelven kétféleképpen hozhat létre szálat. Ez a szálosztály kiterjesztésével vagy a Runnable interfész megvalósításával. A Thread osztály konstruktorokkal és metódusokkal rendelkezik a szálon műveletek létrehozására és végrehajtására. A Thread osztály kiterjeszti az Object osztályt és megvalósítja a Runnable interfészt. A Runnable interfészt minden olyan osztálynak meg kell valósítania, amelynek példányait egy szál hajtja végre. Amikor a szál végrehajtódik, a végrehajtandó kód a futtatási metóduson belülre kerül. A futni kívánt szálat a szálütemező választja ki. Csak egy szál fut egyetlen folyamatban.

Egy szál több fázison megy keresztül. A Thread osztályú objektum létrehozása után a programozó meghívhatja a start metódust. A metódus meghívása előtt a szálról azt mondják, hogy új állapotban van. A szálütemező kiválasztja a futtatandó szálat. Ha a szálat még nem választotta ki a szálütemező, de a start metódus meghívásra kerül, akkor a szál futtatható állapotban van. Miután a szálütemező kiválasztja a végrehajtandó szálat, az futó állapotba kerül. Ha a szál él, de jelenleg nem futtatható, akkor nem futtatható vagy blokkolt állapotban van. A futási metódus befejezése után a szál lezárt állapotba kerül. Ezek a szál életciklusának fő fázisai.

A szálosztályban különféle módszerek állnak rendelkezésre a különböző feladatok végrehajtására. Az alvásmódszert arra használják, hogy a módszert meghatározott ideig aludják. Az alvó mód szintaxisa a public void alvás (hosszú ezredmásodperc), amely InterruptedExceptiont dob. Ez azt okozza, hogy az éppen futó szál meghatározott számú ezredmásodpercre ideiglenesen leállítja a végrehajtást. Ha egy másik szál megszakítja az aktuális szálat, az aktuális szál megszakított állapota törlődik, amikor ez a kivétel megjelenik.

Különbség az alvás és a várakozás között Java nyelven
Különbség az alvás és a várakozás között Java nyelven

01. ábra: Java program alvó móddal

A fenti program szerint a futtatási metódus olyan kódot tartalmaz, amelyet végre kell hajtani. A főprogramban az ExampleThread1 két objektuma jön létre, és ezeken hívják meg a start metódusokat. Ez lehetővé teszi a kód futtatását a futtatási metóduson belül. Egyszerre csak egy szál fut. A Szállal.alvás (1000); lehetővé teszi, hogy az első szál 1000 ezredmásodpercig leállítsa a végrehajtást. Amikor egy szál alvó állapotban van, a szálütemező felveszi a másik szálat.

Mi a várakozás a Java-ban?

Több szál is hozzáférhet egy megosztott erőforráshoz. Ez hibás kimenetet eredményezhet. A szálszinkronizálással csak egy szál hozható létre a megosztott erőforrás eléréséhez. Tegyük fel a következő helyzetet. Ha két szál van (t1 és t2), a t1 elkezdi menteni az értékeket egy Text1.txt nevű szövegfájlba. Ezeket az értékeket más számításokhoz használják fel, amikor t1 visszatér. Ha t2 a t1 visszatérése előtt kezdődik, t2 módosíthatja a t1 által mentett értékeket. Ez azt okozhatja, hogy a t1 rossz kimenetet ad. A szinkronizálás segítségével, amikor a t1 elkezdi használni a Text1.txt fájlt, az adott fájl zárolható, így csak a t1 által érhető el. A t2 nem tudja megváltoztatni, amíg a t1 fel nem oldja a zárolást a szövegfájl eléréséhez. A feladat befejeztével a t1 feloldhatja a zárat. A zárat monitornak is nevezik.

A szálak szinkronizálása szálak közötti kommunikációval érhető el. A kritikus szakasz egy kódszegmens, amely hozzáfér a megosztott erőforrásokhoz. A szálak közötti kommunikáció során egy szál futása a kritikus szakaszában szünetel, és egy másik szál beléphet ugyanabba a kritikus szakaszba, hogy végre lehessen hajtani. Várakozás, értesítés és notifyAll metódusokkal valósul meg. Az Object osztályba tartoznak. A várakozás metódus arra szolgál, hogy az aktuális szál feloldja a zárolást, és várja meg, amíg egy másik szál meghívja az objektum notify vagy notifyAll metódusát. Az értesítési metódus a zárolásra váró egyetlen szál felébresztésére szolgál. A notifyAll minden olyan szálat felébreszt, amely a záron várakozik.

Az alvás és a várakozás közötti különbség a Java-ban_Figure 02
Az alvás és a várakozás közötti különbség a Java-ban_Figure 02

02. ábra: Számológép osztály

Főbb különbség az alvás és a várakozás között Java nyelven
Főbb különbség az alvás és a várakozás között Java nyelven

03. ábra: Fő módszer

A Számológép osztály kiterjeszti a szálat. A szinkronizált blokk a futtatási metóduson belül van. A for hurok és értesítés metódus a szinkronizált blokkon belül található. A fő metóduson belül egy szál egy példánya jön létre, és a start metódus meghívódik azon a példányon. A fő módszer megvárja, amíg a szál értesítést ad. A program végrehajtásakor a fő metódus megvárja a futási metódus teljes végrehajtását, és várja a notify metódust. Az értesítési metódus meghívása után a fő metódus abbahagyja a várakozást, és megkezdi a kód többi részének végrehajtását. A Main vár, amíg a Számológép szál befejeződik. Végül kinyomtatjuk az összeg eredményét.

Ha nincs szinkronizált blokk, és ha a fő metódusnak van egy kódja az alábbiak szerint, akkor a kimenetet nullaként adja meg, mert nem várja meg a másik szál befejezését.

Számológép t1=új számológép ();

t1. kezdés ();

System.out.println (t1.sum);

Mi a hasonlóság az alvás és a várakozás között Javaban?

Mind az alvás, mind a várakozás olyan módszerek, amelyek használhatók a többszálú Java-ban való megvalósítás során

Mi a különbség az alvás és a várakozás között Javaban?

alvás vs várakozás Java-ban

Az alvásmódszer hatására az aktuális szál felfüggeszti a végrehajtást a megadott számú ezredmásodpercig, a rendszeridőzítők és ütemezők pontosságától függően. A várakozás metódus hatására az aktuális szál megvárja, amíg egy másik szál meg nem hívja az objektum notify vagy notifyAll metódusát.
Társítás a zárral
Az alvásmódszer nem oldja fel az objektum zárolását a szinkronizálás során. A várakozás metódus feloldja a zárolást a szinkronizálás során.
Végrehajtási mód
Az alvás mód az aktuális szálon fut. A várakozás metódus meghívásra kerül az objektumon.
Kapcsolódó osztály
Az alvás a szál osztály egyik módszere. A várakozás az Object osztály egyik metódusa.
Befejezés
Az alvási folyamat a megadott idő letelte után fejeződik be. A várakozási metódus megszakad a notify vagy notifyAll metódusok meghívásával.

Összefoglaló – alvás vs várakozás Java-ban

Az operációs rendszeren több folyamat is fut. Minden folyamatnak több szála lehet. A szál az operációs rendszer legkisebb feldolgozási egysége. A Java programozási nyelv támogatja a többszálú feldolgozást. Lehetővé teszi több szál egyidejű futtatását. Az alvás és a várakozás két olyan módszer, amely többszálú feldolgozás során használható. A Java-ban az alvás és a várakozás közötti különbség az, hogy az alvó üzemmód az aktuális szál végrehajtásának felfüggesztésére szolgál a megadott számú ezredmásodpercig, míg a várakozási metódus arra készteti az aktuális szálat, hogy megvárja, amíg egy másik szál meghívja a notify vagy notifyAll parancsot. metódus az objektumhoz.

Ajánlott: