
Összehasonlító táblázat
Az összehasonlítás alapja | alvás | várjon |
---|---|---|
Alapvető | Az alvó mód nem oldja meg az objektum zárolását, amíg meg nem szakad. | A várakozási módszer a objektum zárolását engedélyezi, hogy a többi objektum végrehajtható legyen, amíg az értesítés vagy az értesítés minden módja meghívásra kerül. |
Osztály | Az alvó módszert a Téma osztály határozza meg. | A várakozási módszer az Objektum osztályban van meghatározva. |
szinkronizált | Az alvó módszert nem kell a szinkronizált környezetben hívni. | A várakozási módot a Szinkronizált környezetben kell hívni. |
befejezés | Az alvó mód végrehajtása akkor fejeződik be, ha egy szál megszakítja, vagy lejárt az alvás módja. | A várakozási mód végrehajtása befejeződik, ha az értesítési () vagy az értesítési () módszer () módszer megszakítja. |
Statikus | Az alvó módszer statikus módszer. | A várakozási módszer nem statikus, ezért objektumra van szükség ahhoz, hogy felhívja azt. |
Végrehajtás | Az alvó módszert az aktuális szálon hajtjuk végre. | A várakozási módot az objektumon hajtjuk végre. |
Kivétel | InterruptedException | IllegalArgumentException, IllegalMonitorStateException, InterruptedException. |
Az alvó módszer meghatározása
Az alvó módszer a Thread osztály statikus módszere. Az alvó módszert akkor hívják meg, ha egy szál nem akar semmilyen feladatot végrehajtani egy bizonyos ideig. Az alvó módszer befejezi a végrehajtását, ha lejárt a módszer ideje, vagy megszakítja a végrehajtás más szálai. Miután befejezte az alvó módszert, a szál újra megnyerte a futó állapotát. Az alvó módszertól két az alább látható.
nyilvános statikus natív üreges alvás (hosszú milliszekundum); nyilvános statikus ürítés alvás (hosszú milliszekundum és int nanoszekundum);
A fenti két formában megfigyelhetjük, hogy az időt mind az alvási módszer, mind a formában említik. Ez azért van, mert a szál mindig egy adott időpontban alszik a paraméterben. Az alvó módszert bármely más szál megszakíthatja a végrehajtás során; így meg tudja dobni a megszakított kivételt. Gondoskodnia kell arról, hogy a kivételt a próbálkozás / fogás blokkolással kezelje, vagy ha a kulcsszavakat másképp dobja, akkor a fordítási idő hiba lesz. Az alvó módszer az aktuális objektum zárolását tartja a végrehajtásban, és nem teszi lehetővé más objektumok végrehajtását, amíg befejezi a végrehajtást.
A várakozási módszer meghatározása
A várakozás az Objektum osztályban meghatározott módszer. A várakozási módot akkor használják, ha több feladat (szál) egyidejűleg küzd az azonos erőforrásért. A várakozási módszer, amikor meghívták, felszabadítja a várakozási módot meghívó objektum zárolását. És adjon esélyt arra, hogy egy másik objektumot végrehajtsanak, amíg egy értesítési módszert nem használnak, amely tovább folytatja a várakozási módszerrel kiadott objektum zárolását. A várakozási módszer a következő formában van.
várjon(); várjon (hosszú milliszekundum); várjon (hosszú milliszekundum, int nanoszekundum);
Ahogy a várakozási módszer fenti három formájánál, az első módszernek nincs időparamétere, ami azt jelenti, hogy a várakozási módszer végrehajtása addig folytatódik, amíg az értesítési vagy értesítési mód nem kerül alkalmazásra. A többi két módszer időparaméterekkel rendelkezik. Tehát addig fognak végrehajtani, amíg az idő lejár, vagy addig, amíg az értesítés vagy a noitfyAll módszer korábban lejár, mint az idő. A várakozási módszer kivételeket dobhat. IllegalArgumentException, ha az átadott idő argumentum negatív. IllegalMonitorStateException, ha az aktuális szál nem használja az erőforrást. Ha megszakad a várakozási módszer, akkor megszakadtElfogadás.
Az alvás és a várakozási módszer közötti különbségek Java-ban
- Az alvási és várakozási módot megkülönböztető fő pont az, hogy az alvás módja megtartja az objektum zárolását, amíg meg nem szakad vagy az idő lejár. A várakozási módszer azonban felszabadítja a rajta lévő objektum zárolását, és lehetőséget ad a többi objektum végrehajtására.
- Az alvó módszert a Thread osztályban határozzák meg, míg a várakozási módszer az Objektum osztályban van meghatározva.
- Az alvó módszert nem kell szinkronizált környezetből hívni. A várakozási módot azonban szinkronizálva kell hívni.
- Az alvás módja felébred, ha a módszer ideje lejár, vagy a másik szál megszakítja. A várakozási módszer felébred
amikor az értesítési vagy értesítési módot használjuk. - Az alvási módszer statikus módszer, míg a várakozási módszer nem statikus módszer.
- Az alvó módszert az aktuális szálon hajtjuk végre, míg a várakozási módot az objektumon hajtjuk végre, amelyik meghívja.
- Az alvó módszer által kivetett kivétel megszakadt, míg a thrwon kivételek kivételével az IllegalArgumentException, IllegalMonitorStateException, InterruptedException .
Következtetés:
Ha több szálat akar használni egyenként, akkor a várakozási módszert kell használni. Ha egy szál nem kíván semmilyen feladatot végrehajtani, akkor az alvó módszert kell használni.