logo

Višenitnost u Javi

  1. Višenitnost
  2. Multitasking
  3. Višezadaćnost temeljena na procesu
  4. Višezadaćnost temeljena na nitima
  5. Š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.

Java Multithreading

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.
Znaš li
  • 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?
Što ćemo naučiti u Multithreadingu
  • 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