logo

Multithreading v Jave

  1. Multithreading
  2. Multitasking
  3. Multitasking založený na procesoch
  4. Multitasking založený na vláknach
  5. Č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.

Java Multithreading

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.
Vieš
  • 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?
Čo sa naučíme v multithreadingu
  • 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