Porovnávacia tabuľka
Základ pre porovnanie | spánok | počkať |
---|---|---|
základné | Spánková metóda nezablokuje zámok na objekte, kým sa nepreruší. | Metóda čakania uvoľní zámok na objekte a nechá ostatné objekty vykonať, kým sa nevyvolá upozornenie alebo neozvela. |
Trieda | Spánková metóda je definovaná v triede Thread. | Metóda čakania je definovaná v triede Object. |
synchronizované | Metóda spánku nemusí byť volaná v rámci synchronizovaného kontextu. | Metóda čakania sa musí povoliť v kontexte synchronizácie. |
absolvovaní | Režim spánku sa ukončí, keď ho preruší vlákno alebo uplynie doba spánku. | Čakanie na vykonanie metódy je dokončené, keď to oznámi () alebo notifyAll () metóda preruší. |
statický | Spánková metóda je statická metóda. | Metóda čakania nie je statická, preto potrebuje objekt na vyvolanie. |
poprava | Metóda spánku sa vykoná na aktuálnom vlákne. | Metóda čakania sa vykoná na objekte. |
výnimka | InterruptedException | Nezákonný príkaz vylúčenia, nezákonné monitorovanie stavu, prerušená výnimka. |
Definícia metódy spánku
Metóda spánku je statická metóda triedy Thread . Metóda spánku sa vyvolá, keď vlákno nechce vykonávať žiadnu úlohu počas určitého časového obdobia. Metóda spánku dokončí jej vykonanie buď vtedy, keď uplynula doba platnosti metódy, alebo je prerušená niektorou inou niťou pri vykonávaní. Po dokončení spánkovej metódy sa vlákno znova dostane do stavu, ktorý sa dá spustiť. Existujú dva spôsoby spánku, ako je uvedené nižšie.
verejný statický natívny neplatný spánok (dlhá milisekunda); verejný statický prázdny spánok (dlhé milisekundy a int nanosekundy);
Vo vyššie uvedených dvoch formách môžete pozorovať, že čas je spomenutý v oboch formách spánkovej metódy. Je to preto, že vlákno vždy spí pre určitý čas uvedený v parametri. Spánková metóda môže byť pri jej vykonávaní prerušená akoukoľvek inou niťou; preto môže hodiť prerušenú výnimku. Musíte sa postarať o to, aby sa s výnimkou zaobchádzalo buď skúšať / chytiť blok, alebo vrati kľúčové slová inak, to povedie k chybe kompilácie času. Metóda spánku udržiava zámok na aktuálnom objekte pri vykonávaní a nedovoľuje, aby iný objekt vykonal až do ukončenia jeho vykonania.
Definícia metódy čakania
Čakať je metóda definovaná v triede Object . Metóda čakania sa používa vtedy, keď niekoľko úloh (vlákien) zápasí s rovnakým zdrojom naraz. Metóda čakania, keď je vyvolaná, uvoľní zámok na objekt, ktorý vyvolal metódu čakania. A poskytnúť šancu inému objektu, aby sa vykonal, kým sa nezavolá metóda oznamovania, ktorá ďalej obnoví zámok na objekt uvoľnený metódou čakania. Metóda čakania má nasledujúcu formu.
počkať (); počkajte (dlhá milisekunda); čakať (dlhá milisekunda, int nanosekunda);
Rovnako ako vo vyššie uvedených troch formách metódy čakania, prvá metóda nemá žiadny časový parameter, znamená to, že vykonanie metódy čakania bude pokračovať až do oznámenia, alebo sa nezavolá metóda notifyAll. Ostatné dve metódy majú časové parametre. Takže budú vykonávať až do uplynutia času, alebo do oznámenia alebo noitfyVšetky metódy sú vyvolané skôr ako uplynie čas. Metóda čakania môže obsahovať výnimky. IllegalArgumentException, ak je časový argument uvedený ako negatívny. IllegalMonitorStateException, ak aktuálna podproces nepoužíva zdroj. InterruptedException, ak je prerušená metóda čakania.
Kľúčové rozdiely medzi režimom spánku a čakania v jazyku Java
- Hlavný bod, ktorý rozlišuje spôsob spánku a čakania, spočíva v tom, že spánková metóda drží zámok na objekte až do jeho prerušenia alebo uplynutia jeho času. Metóda čakania však uvoľní zámok na objekt, ktorý ho vyvolá, a dáva ostatným objektom šancu na vykonanie.
- Metóda spánku je definovaná v triede Thread, pričom metóda čakania je definovaná v triede Object .
- Metóda spánku nemusí byť vyvolaná zo synchronizovaného kontextu. Metódu čakania je však potrebné zavolať zo synchronizácie.
- Metóda spánku sa prebudí, ak uplynie platnosť metódy alebo je prerušená druhou niťou. Metóda čakania sa prebudí
keď sa vyvolá metóda oznámenia alebo oznámenia Všetko. - Metóda spánku je statická metóda, zatiaľ čo metóda čakania nie je statická metóda.
- Metóda spánku sa vykoná na aktuálnom vlákne, zatiaľ čo metóda čakania sa vykoná na objekte, ktorý ju vyvolá.
- Výnimka vyvolaná spánkovou metódou je InterruptedException, zatiaľ čo výnimky thrwon by wait metóda sú IllegalArgumentException, IllegalMonitorStateException, InterruptedException .
záver:
Ak je viacero vlákien potrebných jeden a ten istý prostriedok, musí sa použiť metóda čakania. Ak vlákno nechce vykonávať žiadnu úlohu, musí sa použiť metóda spánku.