- Večnitnost
- Večopravilnost
- Procesno zasnovana večopravilnost
- Večopravilnost na osnovi niti
- Kaj je nit
Večnitnost v Java je postopek izvajanja več niti hkrati.
Nit je lahek podproces, najmanjša enota obdelave. Večprocesiranje in večnitnost se uporabljata za doseganje večopravilnosti.
sql ddl ukazi
Vendar uporabljamo večnitnost kot večprocesiranje, ker niti uporabljajo skupno pomnilniško območje. Ne dodelijo ločenega pomnilniškega območja, tako da prihranijo pomnilnik, preklapljanje konteksta med nitmi pa traja manj časa kot proces.
Java Multithreading se večinoma uporablja v igrah, animacijah itd.
Prednosti Java Multithreading
1) To ne blokira uporabnika ker so niti neodvisne in lahko izvajate več operacij hkrati.
2) Ti lahko izvede veliko operacij skupaj, tako da prihrani čas .
3) Niti so neodvisen , tako da ne vpliva na druge niti, če pride do izjeme v eni niti.
Večopravilnost
Večopravilnost je proces izvajanja več nalog hkrati. Za izkoriščanje procesorja uporabljamo večopravilnost. Večopravilnost je mogoče doseči na dva načina:
- Procesna večopravilnost (večprocesiranje)
- Večopravilnost na osnovi niti (večnitnost)
1) Procesna večopravilnost (večprocesiranje)
- Vsak proces ima naslov v pomnilniku. Z drugimi besedami, vsak proces dodeli ločeno pomnilniško območje.
- Postopek je težek.
- Stroški komunikacije med procesoma so visoki.
- Prehod iz enega procesa v drugega zahteva nekaj časa za shranjevanje in nalaganje registri , spominske karte, posodabljanje seznamov itd.
2) Večopravilnost na podlagi niti (Multithreading)
- Niti si delijo isti naslovni prostor.
- Nit je lahka.
- Stroški komunikacije med nitmi so nizki.
Opomba: Za vsako nit je potreben vsaj en proces.
Kaj je nit v Javi
Nit je lahek podproces, najmanjša enota obdelave. Gre za ločeno pot izvršitve.
Niti so neodvisne. Če pride do izjeme v eni niti, to ne vpliva na druge niti. Uporablja skupno pomnilniško območje.
Kot je prikazano na zgornji sliki, se znotraj procesa izvede nit. Med nitmi obstaja preklapljanje konteksta. V operacijskem sistemu je lahko več procesov in en proces ima lahko več niti.
Opomba: naenkrat se izvaja samo ena nit.
Razred Java Thread
Java ponuja Razred niti za dosego programiranja niti. Razred niti zagotavlja konstruktorji in metode za ustvarjanje in izvajanje operacij v niti. Razred niti se razširi Razred predmeta in izvaja vmesnik Runnable.
Nitne metode Java
S.N. | Modifikator in vrsta | Metoda | Opis |
---|---|---|---|
1) | praznina | začetek() | Uporablja se za začetek izvajanja niti. |
2) | praznina | teči() | Uporablja se za izvedbo dejanja za nit. |
3) | statična praznina | spati() | Nit spi za določen čas. |
4) | statična nit | trenutna nit() | Vrne referenco na trenutno izvajani predmet niti. |
5) | praznina | pridruži se() | Čaka, da nit umre. |
6) | int | getPriority() | Vrne prednost niti. |
7) | praznina | setPriority() | Spremeni prioriteto niti. |
8) | Vrvica | getName() | Vrne ime niti. |
9) | praznina | setName() | Spremeni ime niti. |
10) | dolga | getId() | Vrne ID niti. |
enajst) | logično | isAlive() | Preizkuša, ali je nit živa. |
12) | statična praznina | donos () | Povzroči, da se objekt niti, ki se trenutno izvaja, začasno ustavi in omogoči začasno izvajanje drugih niti. |
13) | praznina | suspendiraj() | Uporablja se za obešanje niti. |
14) | praznina | Nadaljuj() | Uporablja se za nadaljevanje obešene niti. |
petnajst) | praznina | stop() | Uporablja se za zaustavitev niti. |
16) | praznina | uničiti () | Uporablja se za uničenje skupine niti in vseh njenih podskupin. |
17) | logično | isDaemon() | Preizkuša, ali je nit demonska nit. |
18) | praznina | setDaemon() | Označi nit kot demonsko ali uporabniško nit. |
19) | praznina | prekiniti() | Prekinja nit. |
dvajset) | logično | je prekinjeno() | Preveri, ali je bila nit prekinjena. |
enaindvajset) | statična logična vrednost | zmoten() | Preveri, ali je bila trenutna nit prekinjena. |
22) | statična int | activeCount() | Vrne število aktivnih niti v skupini niti trenutne niti. |
23) | praznina | preveriDostop() | Določa, ali ima trenutno delujoča nit dovoljenje za spreminjanje niti. |
24) | statična logična vrednost | holdLock() | Vrne true, če in samo če trenutna nit zadrži zaklepanje monitorja na podanem objektu. |
25) | statična praznina | dumpStack() | Uporablja se za tiskanje sledi sklada trenutne niti v standardni tok napak. |
26) | StackTraceElement[] | getStackTrace() | Vrne matriko elementov sledi sklada, ki predstavlja izpis sklada niti. |
27) | statična int | naštej() | Uporablja se za kopiranje skupine niti vsake aktivne niti in njene podskupine v navedeno matriko. |
28) | Nit.Stanje | getState() | Uporablja se za vrnitev stanja niti. |
29) | ThreadGroup | getThreadGroup() | Uporablja se za vrnitev skupine niti, ki ji ta nit pripada |
30) | Vrvica | toString() | Uporablja se za vrnitev nizovne predstavitve te niti, vključno z imenom niti, prednostjo in skupino niti. |
31) | praznina | obvestiti() | Uporablja se za posredovanje obvestila samo eni niti, ki čaka na določen objekt. |
32) | praznina | obvestiVse() | Uporablja se za pošiljanje obvestila vsem čakajočim nitim določenega predmeta. |
33) | praznina | setContextClassLoader() | Nastavi kontekstni nalagalnik razredov za nit. |
3. 4) | ClassLoader | getContextClassLoader() | Vrne kontekst ClassLoader za nit. |
35) | statični Thread.UncaughtExceptionHandler | getDefaultUncaughtExceptionHandler() | Vrne privzeto obravnavo, ki se prikliče, ko se nit nenadoma prekine zaradi neulovljene izjeme. |
36) | statična praznina | setDefaultUncaughtExceptionHandler() | Nastavi privzeto obravnavo, ki se prikliče, ko se nit nenadoma prekine zaradi neulovljene izjeme. |
- Kako izvesti dve nalogi z dvema nitima?
- Kako izvesti večnitnost z anonimnim razredom?
- Kaj je razporejevalnik niti in kakšna je razlika med vnaprejšnjim razporejanjem in časovnim rezanjem?
- Kaj se zgodi, če nit začnemo dvakrat?
- Kaj se zgodi, če pokličemo metodo run() namesto metode start()?
- Kaj je namen metode pridružitve?
- Zakaj JVM prekine demonsko nit, če ni več uporabniških niti?
- Kaj je kljuka za zaustavitev?
- Kaj je zbiranje smeti?
- Kaj je namen metode finalize()?
- Kaj pomeni metoda gc()?
- Kaj je sinhronizacija in zakaj uporabljati sinhronizacijo?
- Kakšna je razlika med sinhronizirano metodo in sinhroniziranim blokom?
- Katera sta dva načina za izvedbo statične sinhronizacije?
- Kaj je zastoj in kdaj lahko nastane?
- Kaj je mednitna komunikacija ali sodelovanje?
- Večnitnost
- Življenjski cikel niti
- Dva načina za ustvarjanje niti
- Kako izvajati več nalog z več niti
- Razporejevalnik niti
- Spanje niti
- Ali lahko dvakrat začnemo nit?
- Kaj se zgodi, če pokličemo metodo run() namesto metode start()?
- Pridruževanje niti
- Poimenovanje niti
- Prednost niti
- Daemon Thread
- ShutdownHook
- Odvoz smeti
- Sinhronizacija s sinhronizirano metodo
- Sinhroniziran blok
- Statična sinhronizacija
- Zastoj
- Komunikacija med nitmi