Kľúčový rozdiel - spánok vs čakanie v Jave
Spánok a čakanie sú dve metódy používané na viacvláknové spracovanie 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 Jave je ten, že spánok sa používa na pozastavenie vykonávania aktuálneho vlákna na zadaný počet milisekúnd, zatiaľ čo metóda čakania sa používa na to, aby spôsobila, že súčasné vlákno počká, kým iné vlákno nevyvolá upozornenie metóda tellAll pre objekt.
Vlákno je najmenšia jednotka spracovania v operačnom systéme. Je to jediný postupný tok riadenia v rámci programu. Nite sú ľahké. Viacvlákno je mechanizmus spustenia viacerých vlákien súčasne. Programovacie jazyky ako Java podporuje viacvláknové spracovanie. Multithreading má výhody, pretože umožňuje spúšťať viac vlákien súčasne a vlákna sú na sebe nezávislé. V Jave existujú metódy, ktoré sa dajú použiť na viacvláknové spracovanie. Dvaja z nich spia a čakajú.
OBSAH
1. Prehľad a kľúčový rozdiel
2. Čo je spánok v Jave
3. Čo je čakanie v Jave
4. Podobnosti medzi spánkom a čakaním v Jave
5. Porovnanie vedľa seba - spánok vs čakanie v Jave v tabuľkovej forme
6. Zhrnutie
Čo je spánok v Jave?
V operačnom systéme beží viac procesov. Proces je program, ktorý sa vykonáva. Každý proces môže mať viac vlákien a medzi týmito vláknami nastáva prepínanie kontextu. V prostredí Java existujú dva spôsoby, ako vytvoriť vlákno. To znamená rozšírením triedy vlákna alebo implementáciou rozhrania Runnable. Trieda Thread obsahuje konštruktory a metódy na vytváranie a vykonávanie operácií na vlákne. Trieda Thread rozširuje triedu Object a implementuje rozhranie Runnable. Rozhranie Runnable by mala implementovať každá trieda, ktorej inštancie sú určené na vykonanie pomocou vlákna. Keď sa vlákno spustí, kód, ktorý by sa mal vykonať, sa napíše do metódy run. Vlákno, ktoré by sa malo spustiť, je vybrané plánovačom vlákien. V jednom procese beží iba jedno vlákno.
Niť prechádza niekoľkými fázami. Po vytvorení objektu triedy Thread môže programátor vyvolať metódu start. Pred vyvolaním tejto metódy je vlákno údajne v novom stave. Plánovač vlákien vyberie vlákno, ktoré sa má spustiť. Ak vlákno ešte nie je vybrané plánovačom vlákien, ale ak je vyvolaná metóda spustenia, je vlákno v spustiteľnom stave. Keď plánovač vlákien vyberie vlákno, ktoré sa má vykonať, prepne sa do spusteného stavu. Ak je vlákno živé, ale momentálne nie je vhodné na spustenie, je v stave nespustiteľnom alebo blokovanom. Po dokončení metódy spustenia vlákno prejde do ukončeného stavu. To 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 spanie metódy na konkrétny čas. Syntax pre metódu spánku je public void sleep (dlhé milisekundy), ktorá vyvolá InterruptedException. Spôsobí to, že aktuálne vykonávajúce vlákno dočasne zastaví vykonávanie na zadaný počet milisekúnd. Ak iné vlákno preruší súčasné vlákno, stav prerušenia aktuálneho vlákna sa vymaže, keď sa vyvolá táto výnimka.
Obrázok 01: Program Java s metódou spánku
Podľa vyššie uvedeného programu obsahuje metóda spustenia kód, ktorý by sa mal vykonať. V hlavnom programe sú vytvorené dva objekty ExampleThread1 a sú na ne vyvolané metódy start. To umožní spustiť kód vo vnútri metódy spustenia. Naraz sa spustí iba jedno vlákno. S niťou. spánok (1 000); umožní prvému vláknu ukončiť vykonávanie po dobu 1000 milisekúnd. Keď vlákno spí, plánovač vlákien zdvihne druhé vlákno.
Čo je čakanie v Jave?
K zdieľanému prostriedku môže mať prístup viac vlákien. Môže to spôsobiť generovanie nesprávneho výstupu. Synchronizáciu vlákien je možné použiť na vytvorenie iba jedného vlákna na prístup k zdieľanému prostriedku. Predpokladajme situáciu nasledovne. 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 nejaký iný výpočet, keď sa vráti t1. Ak sa t2 spustí skôr, ako sa vráti t1, t2 môže zmeniť hodnoty uložené pomocou t1. To môže spôsobiť, že t1 poskytne nesprávny výstup. S pomocou synchronizácie, keď t1 začne používať súbor Text1.txt, je možné tento súbor uzamknúť, takže je prístupný iba t1. T2 to nemôže zmeniť, kým T1 neuvoľní zámok pre prístup k danému textovému súboru. Po dokončení úlohy môže t1 uvoľniť zámok. Zámok je tiež známy ako monitor.
Synchronizáciu vlákien je možné dosiahnuť komunikáciou medzi vláknami. Kritickou časťou je segment kódu, ktorý pristupuje k zdieľaným zdrojom. V komunikácii medzi vláknami je vlákno pozastavené a beží v jeho kritickej časti a inému vláknu je umožnené vstúpiť do rovnakej kritickej časti, ktorá sa má vykonať. Implementuje sa pomocou metód čakania, upozornenia a upozornenia All. Patria do triedy Object. Metóda počkania 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á pre objekt metódu notify alebo notifyAll. Metóda upozornenia sa používa na prebudenie jedného vlákna, ktoré čaká na zámok. NotifyAll prebudí všetky vlákna, ktoré čakajú na zámok.
Obrázok 02: Trieda kalkulačky
Obrázok 03: Hlavná metóda
Trieda Calculator rozširuje vlákno. Synchronizovaný blok je vo vnútri metódy spustenia. Metóda for loop and notify je vo vnútri synchronizovaného bloku. V hlavnej metóde sa v tejto inštancii volá inštancia vlákna a metóda start. Hlavná metóda počká, kým vlákno nepodá oznámenie. Pri vykonávaní programu hlavná metóda čaká na celé vykonanie spustenej metódy a čaká na metódu upozornenia. Po zavolaní metódy upozornenia hlavná metóda zastaví čakanie a začne vykonávať zvyšok kódu. Main čaká na dokončenie vlákna Kalkulačka. Nakoniec sa výsledok súčtu vytlačí.
Ak neexistuje žiadny synchronizovaný blok a ak má hlavná metóda kód uvedený nižšie, dá výstupu nulu, pretože nečaká na dokončenie druhého vlákna.
Kalkulačka t1 = nová Kalkulačka ();
t1. štart ();
System.out.println (t1.sum);
Aká je podobnosť medzi spánkom a čakaním v Jave?
Režim spánku aj čakanie sú metódy, ktoré sa dajú použiť pri implementácii multithreadingu v Jave
Aký je rozdiel medzi spánkom a čakaním v Jave?
Rozdielny článok v strede pred tabuľkou
spánok vs čakanie v Jave |
|
Metóda spánku spôsobí, že súčasné vlákno pozastaví vykonávanie na zadaný počet milisekúnd, s výhradou presnosti a presnosti systémových časovačov a plánovačov. | Metóda Wait spôsobí, že súčasné vlákno počká, kým iné vlákno nevyvolá pre objekt metódu notify alebo notifyAll. |
Asociácia 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 vykonáva na aktuálnom vlákne. | Na objekte sa volá metóda čakania. |
Pridružená trieda | |
Spánok je metódou triedy Thread. | Čakanie je metóda triedy Object. |
Dokončenie | |
Proces spánku je dokončený po uplynutí zadaného času. | Metóda čakania je prerušená volaním metód notifikácie alebo notifyAll. |
Zhrnutie - spánok vs čakanie v Jave
V operačnom systéme beží viac procesov. Každý proces môže mať viac vlákien. Vlákno je najmenšia jednotka spracovania v operačnom systéme. Programovací jazyk Java podporuje viacvláknové spracovanie. Umožňuje beh viacerých vlákien súčasne. Spánok a čakanie sú dve metódy, ktoré sa dajú použiť pri implementácii viacerých vlákien. Rozdiel medzi spánkom a čakaním v Jave spočíva v tom, že spánok sa používa na pozastavenie vykonávania aktuálneho vlákna na zadaný počet milisekúnd, zatiaľ čo metóda čakania sa používa na to, aby spôsobila, že súčasné vlákno počká, kým iné vlákno nevyvolá upozornenie alebo notifyAll. metóda pre objekt.