- Vícevláknové zpracování
- Multitasking
- Procesní multitasking
- Multitasking založený na vláknech
- 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.
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. |
- 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?
- 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