logo

Multithreading v Javě

  1. Vícevláknové zpracování
  2. Multitasking
  3. Procesní multitasking
  4. Multitasking založený na vláknech
  5. Co je Thread

Vícevláknové v Jáva je proces spouštění více vláken současně.

Vlákno je lehký dílčí proces, nejmenší jednotka zpracování. Multiprocessing a multithreading, oba se používají k dosažení multitaskingu.

příklady binárních stromů

My však používáme multithreading než multiprocessing, protože vlákna používají oblast sdílené paměti. Nepřidělují samostatnou paměťovou oblast, takže šetří paměť a přepínání kontextu mezi vlákny trvá méně času než proces.

Java Multithreading se většinou používá ve hrách, animacích atd.


Výhody Java Multithreading

1) To neblokuje uživatele protože vlákna jsou nezávislá a můžete provádět více operací současně.

2) Vy může provádět mnoho operací společně, takže šetří čas .

3) Vlákna jsou nezávislý , takže pokud dojde k výjimce v jediném vlákně, neovlivní to ostatní vlákna.


Multitasking

Multitasking je proces provádění více úkolů současně. K využití CPU používáme multitasking. Multitaskingu lze dosáhnout dvěma způsoby:

  • Procesní multitasking (multiprocessing)
  • Multitasking založený na vláknech (Multithreading)

1) Procesní multitasking (multiprocessing)

  • Každý proces má v paměti adresu. Jinými slovy, každý proces alokuje samostatnou paměťovou oblast.
  • Proces je těžký.
  • Náklady na komunikaci mezi procesem jsou vysoké.
  • Přepnutí z jednoho procesu na druhý vyžaduje určitý čas na uložení a načtení registrů , paměťové mapy, aktualizace seznamů atd.

2) Multitasking založený na vláknech (Multithreading)

  • Vlákna sdílejí stejný adresní prostor.
  • Nit je lehká.
  • Náklady na komunikaci mezi vláknem jsou nízké.

Poznámka: Pro každé vlákno je vyžadován alespoň jeden proces.

Co je Thread v Javě

Vlákno je lehký podproces, nejmenší jednotka zpracování. Je to samostatná cesta provedení.

Vlákna jsou nezávislá. Pokud dojde k výjimce v jednom vlákně, neovlivní to ostatní vlákna. Využívá oblast sdílené paměti.

Java Multithreading

Jak je znázorněno na obrázku výše, vlákno je spuštěno uvnitř procesu. Mezi vlákny dochází k přepínání kontextu. V operačním systému může být více procesů a jeden proces může mít více vláken.

Poznámka: V jednom okamžiku je spuštěno pouze jedno vlákno.

Třída Java Thread

Java poskytuje Třída nití k dosažení programování vláken. Třída vláken poskytuje konstruktéři a metody pro vytváření a provádění operací na vláknu. Třída vláken se rozšiřuje Třída objektu a implementuje rozhraní Runnable.

Java Thread Methods

S.N. Modifikátor a typ Metoda Popis
1) prázdnota Start() Používá se ke spuštění provádění vlákna.
2) prázdnota běh() Používá se k provedení akce pro vlákno.
3) statická prázdnota spát() Uspí vlákno po zadanou dobu.
4) statické vlákno currentThread() Vrací odkaz na aktuálně spuštěný objekt vlákna.
5) prázdnota připojit se() Čeká, až vlákno zemře.
6) int getPriority() Vrací prioritu vlákna.
7) prázdnota setPriority() Změní prioritu vlákna.
8) Tětiva getName() Vrací název vlákna.
9) prázdnota setName() Změní název vlákna.
10) dlouho getId() Vrací id vlákna.
jedenáct) booleovský je naživu() Testuje, zda je vlákno živé.
12) statická prázdnota výtěžek() To způsobí, že se aktuálně spouštěný objekt vlákna pozastaví a umožní dočasné spuštění jiných vláken.
13) prázdnota pozastavit() Slouží k zavěšení vlákna.
14) prázdnota životopis() Používá se k obnovení pozastaveného vlákna.
patnáct) prázdnota stop() Slouží k zastavení vlákna.
16) prázdnota zničit() Používá se ke zničení skupiny vláken a všech jejích podskupin.
17) booleovský isDaemon() Testuje, zda je vlákno vlákno démona.
18) prázdnota setDaemon() Označuje vlákno jako démon nebo uživatelské vlákno.
19) prázdnota přerušit() Přerušuje vlákno.
dvacet) booleovský isinterrupted() Testuje, zda nebylo vlákno přerušeno.
dvacet jedna) statický booleovský přerušeno() Testuje, zda nebylo aktuální vlákno přerušeno.
22) statický int activeCount() Vrací počet aktivních vláken ve skupině vláken aktuálního vlákna.
23) prázdnota checkAccess() Určuje, zda má aktuálně běžící vlákno oprávnění k úpravě vlákna.
24) statický booleovský holdLock() Vrací hodnotu true tehdy a pouze tehdy, když aktuální vlákno drží zámek monitoru na zadaném objektu.
25) statická prázdnota dumpStack() Používá se k tisku trasování zásobníku aktuálního vlákna do standardního chybového proudu.
26) StackTraceElement[] getStackTrace() Vrací pole trasovacích prvků zásobníku představující výpis zásobníku vlákna.
27) statický int vyjmenovat() Používá se ke zkopírování skupiny vláken každého aktivního vlákna a jeho podskupiny do zadaného pole.
28) Závit.Stav getState() Slouží k vrácení stavu vlákna.
29) ThreadGroup getThreadGroup() Slouží k vrácení skupiny vláken, do které toto vlákno patří
30) Tětiva toString() Používá se k vrácení řetězcové reprezentace tohoto vlákna, včetně názvu vlákna, priority a skupiny vláken.
31) prázdnota oznámit() Používá se k upozornění pouze pro jedno vlákno, které čeká na určitý objekt.
32) prázdnota notifyAll() Používá se k předání upozornění všem čekajícím vláknům určitého objektu.
33) prázdnota setContextClassLoader() Nastavuje kontext ClassLoader pro vlákno.
3. 4) ClassLoader getContextClassLoader() Vrátí kontext ClassLoader pro vlákno.
35) statický Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler() Vrátí výchozí obslužnou rutinu vyvolanou, když se vlákno náhle ukončí kvůli nezachycené výjimce.
36) statická prázdnota setDefaultUncaughtExceptionHandler() Nastaví výchozí obslužnou rutinu, která se vyvolá, když se vlákno náhle ukončí kvůli nezachycené výjimce.
Víš
  • Jak provést dva úkoly dvěma vlákny?
  • Jak provádět multithreading anonymní třídou?
  • Co je Plánovač vláken a jaký je rozdíl mezi preemptivním plánováním a časovým dělením?
  • Co se stane, když vlákno začneme dvakrát?
  • Co se stane, když místo metody start() zavoláme metodu run()?
  • Jaký je účel metody spojení?
  • Proč JVM ukončuje vlákno démona, pokud nezbývají žádná uživatelská vlákna?
  • Co je vypínací háček?
  • Co je to sběr odpadu?
  • Jaký je účel metody finalize()?
  • Co znamená metoda gc()?
  • Co je synchronizace a proč ji používat?
  • Jaký je rozdíl mezi synchronizovanou metodou a synchronizovaným blokem?
  • Jaké jsou dva způsoby provádění statické synchronizace?
  • Co je to uváznutí a kdy k němu může dojít?
  • Co je mezivláknová komunikace nebo spolupráce?
Co se naučíme v Multithreadingu
  • Vícevláknové zpracování
  • Životní cyklus vlákna
  • Dva způsoby vytvoření vlákna
  • Jak provádět více úkolů pomocí více vláken
  • Plánovač vláken
  • Spící vlákno
  • Můžeme založit vlákno dvakrát?
  • Co se stane, když místo metody start() zavoláme metodu run()?
  • Připojování k vláknu
  • Pojmenování vlákna
  • Priorita vlákna
  • Démonské vlákno
  • ShutdownHook
  • Odvoz odpadků
  • Synchronizace se synchronizovanou metodou
  • Synchronizovaný blok
  • Statická synchronizace
  • Zablokování
  • Komunikace mezi vlákny