- Višenitnost
- Multitasking
- Višezadaćnost temeljena na procesu
- Višezadaćnost temeljena na nitima
- Što je Thread
Višenitnost u Java je proces izvršavanja više niti istovremeno.
Nit je lagani podproces, najmanja jedinica obrade. Multiprocessing i multithreading, oboje se koriste za postizanje multitaskinga.
zašto string nepromjenjiv u Javi
Međutim, koristimo višenitno nego višeprocesno jer niti koriste zajedničko memorijsko područje. Oni ne dodjeljuju zasebno područje memorije tako da štede memoriju, a prebacivanje konteksta između niti traje kraće od procesa.
Java Multithreading se uglavnom koristi u igrama, animacijama itd.
Prednosti Java Multithreadinga
1) To ne blokira korisnika jer su niti neovisne i možete izvoditi više operacija u isto vrijeme.
2) Vi može obavljati mnoge operacije zajedno, tako da štedi vrijeme .
3) Niti su nezavisna , tako da ne utječe na druge niti ako se iznimka dogodi u jednoj niti.
Multitasking
Multitasking je proces izvršavanja više zadataka istovremeno. Koristimo multitasking kako bismo iskoristili CPU. Multitasking se može postići na dva načina:
- Višezadaćnost temeljena na procesu (višeprocesiranje)
- Višezadaćnost temeljena na nitima (Multithreading)
1) Višezadaćnost temeljena na procesu (višeprocesiranje)
- Svaki proces ima adresu u memoriji. Drugim riječima, svaki proces dodjeljuje zasebno memorijsko područje.
- Proces je težak.
- Trošak komunikacije između procesa je visok.
- Prijelaz s jednog procesa na drugi zahtijeva određeno vrijeme za spremanje i učitavanje registri , memorijske karte, ažuriranje popisa itd.
2) Višezadaćnost temeljena na nitima (Multithreading)
- Niti dijele isti adresni prostor.
- Konac je lagan.
- Troškovi komunikacije između niti su niski.
Napomena: Za svaku nit potreban je najmanje jedan proces.
Što je nit u Javi
Nit je lagani podproces, najmanja jedinica obrade. To je zaseban put izvršenja.
Niti su neovisne. Ako se dogodi iznimka u jednoj niti, to ne utječe na druge niti. Koristi zajedničko memorijsko područje.
Kao što je prikazano na gornjoj slici, nit se izvršava unutar procesa. Postoji promjena konteksta između niti. Može postojati više procesa unutar OS-a, a jedan proces može imati više niti.
Napomena: Istovremeno se izvodi samo jedna nit.
Klasa Java Thread
Java pruža Klasa niti postići programiranje niti. Klasa niti pruža konstruktori i metode za stvaranje i izvođenje operacija na niti. Klasa niti se proširuje Klasa objekta i implementira Runnable sučelje.
Metode Java niti
S N. | Modifikator i vrsta | metoda | Opis |
---|---|---|---|
1) | poništiti | početak() | Koristi se za početak izvođenja niti. |
2) | poništiti | trčanje() | Koristi se za obavljanje akcije za nit. |
3) | statična praznina | spavati() | Spava nit na određeno vrijeme. |
4) | statička nit | trenutna nit() | Vraća referencu na objekt niti koji se trenutno izvodi. |
5) | poništiti | pridružiti() | Čeka da nit umre. |
6) | int | getPriority() | Vraća prioritet niti. |
7) | poništiti | setPriority() | Mijenja prioritet niti. |
8) | Niz | getName() | Vraća naziv niti. |
9) | poništiti | setName() | Mijenja naziv niti. |
10) | dugo | getId() | Vraća ID niti. |
jedanaest) | Booleov | živ je() | Provjerava je li nit živa. |
12) | statična praznina | prinos() | Uzrokuje pauziranje objekta niti koji se trenutno izvodi i dopušta drugim nitima da se privremeno izvedu. |
13) | poništiti | obustaviti() | Koristi se za ovjes niti. |
14) | poništiti | životopis() | Koristi se za nastavak suspendirane niti. |
petnaest) | poništiti | Stop() | Koristi se za zaustavljanje niti. |
16) | poništiti | uništiti() | Koristi se za uništavanje grupe niti i svih njenih podgrupa. |
17) | Booleov | isDaemon() | Testira je li nit demonska nit. |
18) | poništiti | setDaemon() | Označava nit kao daemon ili korisničku nit. |
19) | poništiti | prekinuti() | Prekida nit. |
dvadeset) | Booleov | je prekinut() | Testira je li nit prekinuta. |
dvadeset i jedan) | statički booleov | prekinut() | Testira je li trenutna nit prekinuta. |
22) | statički int | activeCount() | Vraća broj aktivnih niti u grupi niti trenutne niti. |
23) | poništiti | provjeri pristup() | Određuje ima li trenutno pokrenuta nit dopuštenje za izmjenu niti. |
24) | statički booleov | holdLock() | Vraća true ako i samo ako trenutna nit drži zaključavanje monitora na navedenom objektu. |
25) | statična praznina | dumpStack() | Koristi se za ispis praćenja hrpe trenutne niti u standardni tok pogrešaka. |
26) | StackTraceElement[] | getStackTrace() | Vraća niz elemenata praćenja stoga koji predstavljaju ispis stoga niti. |
27) | statički int | nabrojati() | Koristi se za kopiranje grupe niti svake aktivne niti i njezine podgrupe u navedeni niz. |
28) | Nit.Stanje | getState() | Koristi se za vraćanje stanja niti. |
29) | ThreadGroup | getThreadGroup() | Koristi se za vraćanje grupe niti kojoj ova nit pripada |
30) | Niz | toString() | Koristi se za vraćanje prikaza niza ove niti, uključujući naziv niti, prioritet i grupu niti. |
31) | poništiti | obavijestiti() | Koristi se za davanje obavijesti samo za jednu nit koja čeka određeni objekt. |
32) | poništiti | obavijestiSve() | Koristi se za slanje obavijesti svim nitima na čekanju određenog objekta. |
33) | poništiti | setContextClassLoader() | Postavlja kontekstualni ClassLoader za Thread. |
3. 4) | ClassLoader | getContextClassLoader() | Vraća kontekst ClassLoader za nit. |
35) | static Thread.UncaughtExceptionHandler | getDefaultUncaughtExceptionHandler() | Vraća zadani rukovatelj koji se poziva kada se nit naglo prekine zbog neuhvaćene iznimke. |
36) | statična praznina | setDefaultUncaughtExceptionHandler() | Postavlja zadani rukovatelj koji se poziva kada se nit naglo prekine zbog neuhvaćene iznimke. |
- Kako izvršiti dva zadatka pomoću dvije niti?
- Kako izvesti višenitnost pomoću anonimne klase?
- Što je planer niti i koja je razlika između preventivnog rasporeda i vremenskog odsječka?
- Što se događa ako nit pokrenemo dvaput?
- Što se događa ako pozovemo metodu run() umjesto metode start()?
- Koja je svrha metode spajanja?
- Zašto JVM prekida daemon nit ako nema preostalih korisničkih niti?
- Što je kuka za isključivanje?
- Što je odvoz smeća?
- Koja je svrha metode finalize()?
- Što znači metoda gc()?
- Što je sinkronizacija i zašto koristiti sinkronizaciju?
- Koja je razlika između sinkronizirane metode i sinkroniziranog bloka?
- Koja su dva načina za izvođenje statičke sinkronizacije?
- Što je zastoj i kada se može dogoditi?
- Što je međunitna komunikacija ili suradnja?
- Višenitnost
- Životni ciklus niti
- Dva načina za stvaranje niti
- Kako izvršiti više zadataka pomoću više niti
- Raspoređivač niti
- Spavanje niti
- Možemo li započeti nit dva puta?
- Što se događa ako pozovemo metodu run() umjesto metode start()?
- Pridruživanje niti
- Imenovanje niti
- Prioritet niti
- Daemon Thread
- ShutdownHook
- Kolekcija smeća
- Sinkronizacija sinkroniziranom metodom
- Sinkronizirani blok
- Statička sinkronizacija
- Zastoj
- Inter-thread komunikacija