Rozdiel medzi spánkom a čakaním v Jave

Obsah:

Rozdiel medzi spánkom a čakaním v Jave
Rozdiel medzi spánkom a čakaním v Jave

Video: Rozdiel medzi spánkom a čakaním v Jave

Video: Rozdiel medzi spánkom a čakaním v Jave
Video: Un Aperçu du Syndrome de Tachycardie Orthostatique Posturale (POTS) 2024, November
Anonim

Kľúčový rozdiel – spánok a čakanie v Jave

Spánok a čakanie sú dve metódy používané na multithreading v jazyku Java. Metóda spánku patrí do triedy Thread, zatiaľ čo metóda čakania je z triedy Object. Kľúčový rozdiel medzi spánkom a čakaním v jazyku Java je v tom, že spánok sa používa na pozastavenie vykonávania aktuálneho vlákna na určený počet milisekúnd, zatiaľ čo metóda čakania sa používa na to, aby aktuálne vlákno čakalo, kým iné vlákno nevyvolá upozornenie alebo metóda notifyAll pre objekt.

Vlákno je najmenšia jednotka spracovania v operačnom systéme. Je to jeden sekvenčný tok riadenia v rámci programu. Nite sú ľahké. Multithreading je mechanizmus spustenia viacerých vlákien súčasne. Programovacie jazyky ako Java podporujú multithreading. Multithreading má výhody, pretože umožňuje spustiť viacero vlákien súčasne a vlákna sú na sebe nezávislé. V Jave sú metódy, ktoré sa dajú použiť na multithreading. Dvaja z nich spia a čakajú.

Čo je spánok v Jave?

V operačnom systéme beží viacero procesov. Proces je vykonávaný program. Každý proces môže mať viacero vlákien a medzi týmito vláknami dochádza k prepínaniu kontextu. V Jave existujú dva spôsoby vytvorenia vlákna. To znamená rozšírením triedy vlákien alebo implementáciou rozhrania Runnable. Trieda Thread má konštruktory a metódy na vytváranie a vykonávanie operácií s vláknom. Trieda Thread rozširuje triedu Object a implementuje rozhranie Runnable. Rozhranie Runnable by malo byť implementované akoukoľvek triedou, ktorej inštancie sú určené na spustenie vláknom. Keď sa vlákno spustí, kód, ktorý by sa mal spustiť, sa zapíše do metódy run. Vlákno, ktoré sa má spustiť, vyberie plánovač vlákien. V jedinom procese beží iba jedno vlákno.

Vlákno prechádza niekoľkými fázami. Po vytvorení objektu triedy Thread môže programátor vyvolať metódu štart. Pred vyvolaním tejto metódy sa hovorí, že vlákno je v novom stave. Plánovač vlákien vyberie vlákno, ktoré sa má spustiť. Ak plánovač vlákien ešte nevybral vlákno, ale ak je vyvolaná metóda spustenia, vlákno je v spustiteľnom stave. Keď plánovač vlákien vyberie vlákno na vykonanie, prejde do spusteného stavu. Ak je vlákno aktívne, ale momentálne nie je vhodné na spustenie, potom je v stave, v ktorom sa nedá spustiť alebo je zablokované. Po dokončení metódy behu vlákno prejde do ukončeného stavu. Toto sú hlavné fázy životného cyklu vlákna.

V triede vlákien sú k dispozícii rôzne metódy na vykonávanie rôznych úloh. Metóda spánku sa používa na zaspávanie metódy na určitý čas. Syntax pre metódu spánku je verejný void spánok (dlhé milisekúndy) vyvoláva InterruptedException. Spôsobí, že aktuálne spustené vlákno dočasne zastaví vykonávanie na určený počet milisekúnd. Ak iné vlákno preruší aktuálne vlákno, pri vyvolaní tejto výnimky sa vymaže stav prerušenia aktuálneho vlákna.

Rozdiel medzi spánkom a čakaním v Jave
Rozdiel medzi spánkom a čakaním v Jave

Obrázok 01: Program Java s metódou spánku

Podľa vyššie uvedeného programu metóda spustenia obsahuje kód, ktorý by sa mal spustiť. V hlavnom programe sa vytvoria dva objekty ExampleThread1 a na nich sa vyvolajú metódy spustenia. To umožní spustiť kód v metóde spustenia. Naraz sa spúšťa iba jedno vlákno. S vláknom.spánok (1000); umožní prvému vláknu ukončiť vykonávanie na 1000 milisekúnd. Keď vlákno spí, plánovač vlákien prevezme druhé vlákno.

Čo je čakanie v Jave?

K zdieľanému zdroju môže pristupovať viacero vlákien. Môže to spôsobiť generovanie nesprávneho výstupu. Synchronizáciu vlákien možno použiť na vytvorenie iba jedného vlákna na prístup k zdieľanému prostriedku. Predpokladajme nasledujúcu situáciu. Ak existujú dve vlákna ako t1 a t2, t1 začne ukladať hodnoty do textového súboru s názvom Text1.txt. Tieto hodnoty sa použijú na iný výpočet, keď sa vráti t1. Ak t2 začne pred návratom t1, t2 môže zmeniť hodnoty uložené t1. To môže spôsobiť, že t1 poskytne nesprávny výstup. Pomocou synchronizácie, keď t1 začne používať súbor Text1.txt, môže byť tento súbor uzamknutý, takže je prístupný iba pre t1. t2 to nemôže zmeniť, kým t1 neuvoľní zámok na prístup k tomuto textovému súboru. Po dokončení úlohy môže t1 uvoľniť zámok. Zámok je známy aj ako monitor.

Synchronizácia vlákien sa dá dosiahnuť komunikáciou medzi vláknami. Kritická sekcia je segment kódu, ktorý pristupuje k zdieľaným zdrojom. V medzivláknovej komunikácii je vlákno pozastavené vo svojej kritickej sekcii a ďalšie vlákno môže vstúpiť do rovnakej kritickej sekcie, aby sa vykonalo. Realizuje sa pomocou metód wait, notify a notifyAll. Patria do triedy Object. Metóda čakania sa používa na to, aby umožnila aktuálnemu vláknu uvoľniť zámok a počkať, kým iné vlákno nevyvolá metódu notify alebo notifyAll pre objekt. Metóda notify sa používa na prebudenie jedného vlákna, ktoré čaká na uzamknutie. NotifyAll prebudí všetky vlákna, ktoré čakajú na zámku.

Rozdiel medzi spánkom a čakaním v Java_Figure 02
Rozdiel medzi spánkom a čakaním v Java_Figure 02

Obrázok 02: Trieda kalkulačky

Kľúčový rozdiel medzi spánkom a čakaním v Jave
Kľúčový rozdiel medzi spánkom a čakaním v Jave

Obrázok 03: Hlavná metóda

Trieda Kalkulačka rozširuje vlákno. Synchronizovaný blok je vo vnútri metódy behu. Slučka for a metóda oznamovania sú v synchronizovanom bloku. Vo vnútri hlavnej metódy sa vytvorí inštancia vlákna a na túto inštanciu sa zavolá metóda štart. Hlavná metóda počká, kým vlákno nevyšle upozornenie. Pri spúšťaní programu hlavná metóda čaká na úplné vykonanie metódy run a čaká na metódu notify. Po zavolaní metódy notify hlavná metóda prestane čakať a začne vykonávať zvyšok kódu. Main čaká na dokončenie vlákna kalkulačky. Nakoniec sa vytlačí výsledok súčtu.

Ak neexistuje žiadny synchronizovaný blok a ak má hlavná metóda kód uvedený nižšie, na výstupe bude nula, pretože nečaká na dokončenie druhého vlákna.

Kalkulačka t1=nová kalkulačka ();

t1. začať ();

System.out.println (t1.sum);

Aká je podobnosť medzi spánkom a čakaním v Jave?

Spánok aj čakanie sú metódy, ktoré možno použiť pri implementácii multithreadingu v jazyku Java

Aký je rozdiel medzi spánkom a čakaním v Jave?

spánok vs čakanie v Jave

Metóda spánku spôsobí, že aktuálne vlákno pozastaví vykonávanie na určený počet milisekúnd v závislosti od presnosti a presnosti systémových časovačov a plánovačov. Metóda čakania spôsobí, že aktuálne vlákno čaká, kým iné vlákno nevyvolá metódu notify alebo notifyAll pre objekt.
Spojenie so zámkom
Metóda spánku neuvoľní zámok objektu počas synchronizácie. Metóda čakania uvoľní zámok počas synchronizácie.
Spôsob vykonania
Metóda spánku sa spustí v aktuálnom vlákne. Na objekte sa volá metóda čakania.
Pridružená trieda
Spánok je metóda Thread class. Čakanie je metóda triedy Object.
Dokončenie
Proces spánku sa dokončí po uplynutí určeného času. Metóda čakania sa preruší volaním metód notify alebo notifyAll.

Zhrnutie – spánok verzus čakanie v jazyku Java

V operačnom systéme beží viacero procesov. Každý proces môže mať viacero vlákien. Vlákno je najmenšia jednotka spracovania v operačnom systéme. Programovací jazyk Java podporuje multithreading. Umožňuje spustenie viacerých vlákien súčasne. Spánok a čakanie sú dve metódy, ktoré možno použiť pri implementácii multi-threadingu. Rozdiel medzi režimom spánku a čakaním v jazyku Java je v tom, že režim spánku sa používa na pozastavenie vykonávania aktuálneho vlákna na určený počet milisekúnd, zatiaľ čo metóda čakania sa používa na to, aby aktuálne vlákno počkalo, kým iné vlákno nevyvolá upozornenie alebo notifyAll. metóda pre objekt.

Odporúča: