- Multithreading
- Multitasking
- Multitasking založený na procesoch
- Multitasking založený na vláknach
- Čo je vlákno
Viacvláknové v Java je proces vykonávania viacerých vlákien súčasne.
Vlákno je ľahký podproces, najmenšia jednotka spracovania. Multiprocessing a multithreading, obe sa používajú na dosiahnutie multitaskingu.
cpp sa rovná
My však používame multithreading ako multiprocessing, pretože vlákna používajú oblasť zdieľanej pamäte. Neprideľujú samostatnú oblasť pamäte, takže šetrí pamäť a prepínanie kontextu medzi vláknami trvá menej času ako proces.
Java Multithreading sa väčšinou používa v hrách, animáciách atď.
Výhody Java Multithreading
1) To neblokuje používateľa pretože vlákna sú nezávislé a môžete vykonávať viacero operácií súčasne.
2) Vy môže vykonávať veľa operácií spolu, takže šetrí čas .
3) Nite sú nezávislý , takže to neovplyvní ostatné vlákna, ak sa výnimka vyskytne v jednom vlákne.
Multitasking
Multitasking je proces vykonávania viacerých úloh súčasne. Na využitie CPU používame multitasking. Multitasking je možné dosiahnuť dvoma spôsobmi:
- Procesný multitasking (Multiprocessing)
- Multitasking založený na vlákne (Multithreading)
1) Procesný multitasking (Multiprocessing)
- Každý proces má v pamäti adresu. Inými slovami, každý proces alokuje samostatnú pamäťovú oblasť.
- Proces je ťažký.
- Náklady na komunikáciu medzi procesom sú vysoké.
- Prepnutie z jedného procesu na druhý vyžaduje určitý čas na uloženie a načítanie registrov , pamäťové mapy, aktualizácia zoznamov atď.
2) Multitasking založený na vlákne (Multithreading)
- Vlákna zdieľajú rovnaký adresný priestor.
- Niť je ľahká.
- Náklady na komunikáciu medzi vláknom sú nízke.
Poznámka: Pre každé vlákno je potrebný aspoň jeden proces.
Čo je vlákno v jave
Vlákno je ľahký podproces, najmenšia jednotka spracovania. Je to samostatná cesta vykonávania.
Vlákna sú nezávislé. Ak sa vyskytne výnimka v jednom vlákne, neovplyvní to ostatné vlákna. Používa oblasť zdieľanej pamäte.
Ako je znázornené na obrázku vyššie, vo vnútri procesu sa vykoná vlákno. Medzi vláknami dochádza k prepínaniu kontextu. V operačnom systéme môže existovať viacero procesov a jeden proces môže mať viacero vlákien.
Poznámka: Súčasne sa vykoná len jedno vlákno.
Trieda Java Thread
Java poskytuje Trieda nití na dosiahnutie programovania vlákien. Trieda závitov poskytuje konštruktérov a metódy na vytváranie a vykonávanie operácií na vlákne. Trieda závitov sa rozširuje Trieda objektu a implementuje rozhranie Runnable.
Java Thread Methods
S.N. | Modifikátor a typ | Metóda | Popis |
---|---|---|---|
1) | neplatné | začať () | Používa sa na spustenie vykonávania vlákna. |
2) | neplatné | spustiť() | Používa sa na vykonanie akcie pre vlákno. |
3) | statická prázdnota | spánok () | Uspí vlákno na určený čas. |
4) | statické vlákno | currentThread() | Vracia odkaz na aktuálne spustený objekt vlákna. |
5) | neplatné | pripojiť sa () | Čaká na odumretie vlákna. |
6) | int | getPriority() | Vracia prioritu vlákna. |
7) | neplatné | setPriority() | Zmení prioritu vlákna. |
8) | Reťazec | getName() | Vráti názov vlákna. |
9) | neplatné | setName() | Zmení názov vlákna. |
10) | dlhý | getId() | Vráti ID vlákna. |
jedenásť) | boolovská hodnota | je nažive() | Testuje, či je vlákno živé. |
12) | statická prázdnota | výnos() | Spôsobí pozastavenie aktuálne vykonávaného objektu vlákna a dočasné spustenie iných vlákien. |
13) | neplatné | pozastaviť() | Používa sa na zavesenie vlákna. |
14) | neplatné | pokračovať() | Používa sa na obnovenie pozastaveného vlákna. |
pätnásť) | neplatné | stop() | Používa sa na zastavenie vlákna. |
16) | neplatné | zničiť () | Používa sa na zničenie skupiny vlákien a všetkých jej podskupín. |
17) | boolovská hodnota | isDaemon() | Testuje, či je vlákno vlákno démona. |
18) | neplatné | setDaemon() | Označí vlákno ako démon alebo užívateľské vlákno. |
19) | neplatné | prerušiť() | Prerušuje vlákno. |
dvadsať) | boolovská hodnota | isinterrupted() | Testuje, či nebolo vlákno prerušené. |
dvadsaťjeden) | statický booleovský | prerušené() | Testuje, či bolo aktuálne vlákno prerušené. |
22) | statický int | activeCount() | Vráti počet aktívnych vlákien v skupine vlákien aktuálneho vlákna. |
23) | neplatné | checkAccess() | Určuje, či má aktuálne spustené vlákno povolenie na úpravu vlákna. |
24) | statický booleovský | holdLock() | Vráti hodnotu true vtedy a len vtedy, ak aktuálne vlákno drží zámok monitora na zadanom objekte. |
25) | statická prázdnota | dumpStack() | Používa sa na tlač stopy zásobníka aktuálneho vlákna do štandardného chybového prúdu. |
26) | StackTraceElement[] | getStackTrace() | Vracia pole prvkov sledovania zásobníka, ktoré predstavuje výpis zásobníka vlákna. |
27) | statický int | enumerate() | Používa sa na skopírovanie skupiny vlákien každého aktívneho vlákna a jeho podskupiny do určeného poľa. |
28) | Vlákno.Stav | getState() | Používa sa na vrátenie stavu vlákna. |
29) | ThreadGroup | getThreadGroup() | Používa sa na vrátenie skupiny vlákien, do ktorej toto vlákno patrí |
30) | Reťazec | natiahnuť() | Používa sa na vrátenie reťazcovej reprezentácie tohto vlákna vrátane názvu vlákna, priority a skupiny vlákien. |
31) | neplatné | oznámiť () | Používa sa na zaslanie upozornenia iba pre jedno vlákno, ktoré čaká na konkrétny objekt. |
32) | neplatné | notifyAll() | Používa sa na poskytnutie upozornenia všetkým čakajúcim vláknam konkrétneho objektu. |
33) | neplatné | setContextClassLoader() | Nastavuje kontext ClassLoader pre vlákno. |
3. 4) | ClassLoader | getContextClassLoader() | Vráti kontext ClassLoader pre vlákno. |
35) | statický Thread.UncaughtExceptionHandler | getDefaultUncaughtExceptionHandler() | Vráti predvolený obslužný program vyvolaný, keď sa vlákno náhle ukončí z dôvodu nezachytenej výnimky. |
36) | statická prázdnota | setDefaultUncaughtExceptionHandler() | Nastaví predvolený obslužný program, ktorý sa vyvolá, keď sa vlákno náhle ukončí z dôvodu nezachytenej výnimky. |
- Ako vykonať dve úlohy pomocou dvoch vlákien?
- Ako vykonať multithreading anonymnou triedou?
- Čo je Plánovač vlákien a aký je rozdiel medzi preventívnym plánovaním a krájaním času?
- Čo sa stane, ak vlákno začneme dvakrát?
- Čo sa stane, ak namiesto metódy start() zavoláme metódu run()?
- Aký je účel spájacej metódy?
- Prečo JVM ukončí vlákno démona, ak nezostávajú žiadne používateľské vlákna?
- Aký je háčik vypnutia?
- Čo je to zber odpadu?
- Aký je účel metódy finalize()?
- Čo znamená metóda gc()?
- Čo je synchronizácia a prečo ju používať?
- Aký je rozdiel medzi synchronizovanou metódou a synchronizovaným blokom?
- Aké sú dva spôsoby vykonávania statickej synchronizácie?
- Čo je to uviaznutie a kedy k nemu môže dôjsť?
- Čo je to medzivláknová komunikácia alebo spolupráca?
- Multithreading
- Životný cyklus vlákna
- Dva spôsoby vytvorenia vlákna
- Ako vykonávať viacero úloh pomocou viacerých vlákien
- Plánovač vlákien
- Spánok vlákna
- Môžeme začať vlákno dvakrát?
- Čo sa stane, ak namiesto metódy start() zavoláme metódu run()?
- Pripojenie k vláknu
- Pomenovanie vlákna
- Priorita vlákna
- Démonské vlákno
- ShutdownHook
- Odvoz odpadu
- Synchronizácia so synchronizovanou metódou
- Synchronizovaný blok
- Statická synchronizácia
- Zablokovanie
- Komunikácia medzi vláknami