multithreading java tutorial with examples
Ta vadnica razlaga vse o večnitnostih v Javi, implementaciji sočasnosti, življenjskem ciklu niti, primeru razreda niti, niti z uporabo vmesnika, ki ga je mogoče izvesti:
Sočasnost v računalniškem svetu je zmožnost sistema (naj bo to aplikacija, računalnik ali programski jezik), da vzporedno izvaja več primerkov programa ali aplikacije.
S hkratnim zagonom primerkov ali programov zagotavljamo visoko pretočnost in večjo zmogljivost, saj lahko izkoristimo neizkoriščene vire, kot je strojna oprema operacijskega sistema itd. Na primer, če ima sistem več CPU-jev, jih lahko aplikacija učinkovito izkoristi in poveča pretočnost.
=> Obiščite tukaj za ekskluzivno serijo vadnic Java.
Kaj se boste naučili:
- Kaj je večnitnost v Javi
- Kaj je nit v Javi
- Zaključek
Kaj je večnitnost v Javi
V Javi lahko niti obravnavamo kot hrbtenico sočasnosti. Nit je izvedljiva, lahka enota, ki dostopa do skupnih virov in lastnega sklada klicev.
Aplikacija Java je en postopek in znotraj te aplikacije imamo lahko več niti za doseganje sočasnosti.
Vemo, da ima aplikacija, ki se izvaja v sistemu, več primerkov in se ti običajno imenujejo večdokumentske aplikacije. Ti primerki aplikacije se imenujejo procesi. Vsakemu od teh procesov je dodeljena izvršilna enota, znana kot nit.
Odvisno od operacijskega sistema in zahtev aplikacije lahko postopku dodelimo eno nit ali več niti. Ko je postopku prijave dodeljenih več niti, moramo te več niti izvajati hkrati.
' Ta tehnika izvajanja ali izvajanja več niti hkrati ali hkrati je znana kot večnitnost . '
Večnitnost preprosto pomeni, da imamo v isti aplikaciji več kot eno nit.
Programski jezik Java ima vgrajeno podporo za večnitnost.
Večnitnost je prikazana na zgornjem diagramu. Kot je prikazano, obstaja več niti, ki se hkrati izvajajo v aplikaciji.
Na primer, namizna aplikacija, ki ponuja funkcije, kot so urejanje, tiskanje itd., je večnitna aplikacija. Ker je v tej aplikaciji tiskanje v ozadju, lahko hkrati urejamo dokumente in jih tiskamo tako, da te funkcije dodelimo dvema nitima.
Niti v večnitnih aplikacijah potekajo vzporedno vzporedno med seboj. Tako je večnitnost tudi del sočasnosti v Javi. Upoštevajte, da čeprav obstaja več niti, si delijo pomnilniško območje in tako prihranijo na pomnilniku. Niti lahko v kratkem času enostavno preklopijo kontekst.
Večnitnost je v glavnem koristna, saj omogoča sočasno izvajanje dveh ali več delov aplikacije. Tako aplikacija lahko maksimalno izkoristi čas procesorja, čas mirovanja pa je minimalen.
Sledi nekaj izrazov, ki bi jih morali poznati v zvezi z okoljem z več nitmi, saj se pogosto uporabljajo.
Večopravilnost: Pri večopravilnosti se hkrati izvede več nalog.
Večnitnost: Večnitnost, kot smo že omenili, je postopek izvajanja več niti hkrati.
funkcija spanja c ++ linux
Večprocesna obdelava: Pri večprocesorski obdelavi se istočasno izvede več kot en postopek. Podobno kot večopravilnost, vendar je tu vključenih več CPU.
Vzporedna obdelava: Vzporedna obdelava je tehnika, pri kateri več računalnikov deluje hkrati v računalniškem sistemu.
Po razpravi o večnitnosti se zastavlja vprašanje, zakaj sploh potrebujemo večnitnost?
Prednosti večnitnosti
Večnitnost ima različne prednosti, ki pomagajo pri učinkovitem programiranju.
Spodnje točke bodo jasno pokazale.
# 1) Učinkovita uporaba enotnih procesorskih sistemov
Ko je v sistemu samo en CPU, z eno nitjo, se čas procesorja zapravi. Ko je nit zasedena z drugimi viri, kot je IO, CPU miruje. To lahko izboljšamo in bolje uporabimo CPU z večnitnimi aplikacijami.
Če uporabljamo večnitnost, če je ena nit izvedena s CPU, jo lahko uporabi druga nit. Z več nitmi se bo čas nedejavnosti CPU močno zmanjšal.
# 2) Učinkovita uporaba več CPU sistemov
Tako kot posamezni procesorji, tudi pri sistemih z več CPE tudi večnitni programi lahko učinkovito uporabljajo več CPU-jev.
# 3) Izboljšana uporabniška izkušnja glede odzivnosti in poštenosti
Odzivnost sistema se izboljša z večnitnimi aplikacijami. Ne doživljamo 'GUI visi' ko imamo v aplikaciji več niti, ki izvajajo različne naloge in uporabnikom ni treba dolgo čakati, da dobijo odgovor na svoje zahteve.
Podobno so uporabniki pravilno storitve v večnitnih sistemih.
Kako uporabiti sočasnost v Javi
Prvi razred, s katerim lahko v Java implementiramo sočasnost, je java.lang.Nit razred. Ta razred Thread predstavlja osnovo sočasnosti v Javi.
Tudi mi imamo java.lang.Teče vmesnik, ki ga lahko razred Java izvede za abstrakcijo vedenja niti. Za napreden razvoj aplikacij lahko uporabimo java.util.concurrent paket na voljo od Jave 1.5.
V nadaljevanju bomo podrobno razpravljali o sočasnosti v Javi. V tej vadnici bomo razpravljali in razumeli koncept niti v Javi. V naslednjih vajah o večnitnosti bomo raziskali različne koncepte večnitnosti in sočasnosti.
Kaj je nit v Javi
Posamezno nit lahko definiramo kot najmanjšo in najlažjo enoto obdelave. V Javi se niti uporabljajo v programih, ki uporabljajo razred 'Thread'.
Java niti so dve vrsti:
# 1) Uporabniška nit: uporabniška nit se ustvari ob prvem zagonu aplikacije. Potem lahko ustvarimo čim več uporabniških in demonskih niti.
# 2) Daemonova nit: niti demona se v glavnem uporabljajo v ozadju in se uporabljajo za naloge, kot je čiščenje aplikacije itd.
Niti zmanjšajo stroške vzdrževanja aplikacije. Prav tako zmanjšuje režijske stroške aplikacije.
Primer posamezne niti je prikazan spodaj:
public class Main{ public static void main (String [] args){ System.out.println('This is a thread'); } }
Zgornji program bo prikazal »To je nit«, saj se ob zagonu aplikacije ustvari uporabniška nit. V zgornjem programu je glavna funkcija izhodišče aplikacije in ustvarja uporabniško nit.
Življenjski cikel niti
Naslednji diagram prikazuje življenjski cikel niti v Javi.
Kot je prikazano na zgornjem diagramu, ima nit v Javi naslednja stanja:
# 1) Novo: Prvotno je nit, ki je bila pravkar ustvarjena iz razreda niti, v 'novem' stanju. Začeti ga je še treba. Ta nit se tudi imenuje 'Rojena nit' .
# 2) Teče: V tem stanju se z uporabo metode prikliče primerek niti 'Začeti' .
# 3) Tek: Prikliče se metoda zagona primerka niti in nit začne izvajati. To je stanje v teku. Večinoma načrtovalec načrtuje in upravlja niti.
# 4) Blokirano: V aplikaciji je več niti. Te niti morajo počakati na drugo, saj je treba njihovo izvajanje sinhronizirati.
# 5) Prekinjeno: Ko je postopek izvajanja niti končan, se nit zaključi ali se njeno izvajanje ustavi.
Torej se najprej ustvari nit, nato razporejena in pozneje načrtovalec izvede nit. Medtem ko se lahko delujoča nit blokira ali zadrži zaradi kakšne druge dejavnosti. Nato se nadaljuje in ko se obdelava zaključi, se nit izvede.
Prednost teme
Prednost niti določa, kako se ena nit obravnava glede na druge niti v aplikaciji. Prednost niti je celo število.
Spodaj je navedenih nekaj točk, ki si jih je treba zapomniti glede prioritet niti:
življenjski cikel razvoja sistema slapov
- Prednost niti so celoštevilčna števila.
- Z uporabo prioritete niti se lahko odločimo, kdaj naj preklopimo iz ene niti v delujočem stanju v drugo. To je postopek preklopa konteksta, pri katerem zamenjamo kontekst niti.
- Kadar koli lahko nit prostovoljno sprosti svoj nadzor nad CPU. Nato lahko prevzame nit z najvišjo prioriteto.
- Podobno lahko nit z višjo prioriteto prepreči katero koli drugo nit z nižjo prioriteto.
- Razred niti ponuja metodo setPriority (), ki se uporablja za nastavitev prioritete niti.
- Namesto celih števil lahko uporabimo tudi konstante MIN_PRIORITY, MAX_PRIORITY ali NORM_PRIORITY.
Ustvari nit
Nit lahko ustvarimo na enega od naslednjih načinov:
- Razširitev razreda Java 'Thread'.
- Izvedba 'Runnable'.
Razširitev razreda Java 'Thread'
Razred 'Thread' vsebuje konstruktorje in metode, ki nam omogočajo ustvarjanje in izvajanje operacij nad objektom niti. Interno razred Thread implementira vmesnik Runnable in razširja tudi razred Object.
V spodnji tabeli je povzetek različnih konstruktorjev in metod razreda Thread ().
Graditelj / | Prototip | Opis |
---|---|---|
spanje | javni prazen spanec (dolge milisekunde) | Izvajanje trenutne niti se ustavi za določene milisekunde. |
Konstruktor niti () | Nit () | Privzeti konstruktor za ustvarjanje predmeta Thread. |
Nit (ime niza) | Konstruktor za ustvarjanje predmeta Thread z določenim imenom. | |
Navoj (izvedljivo r) | Ustvarite primerek niti z določenim objektom vmesnika, ki ga je mogoče izvesti. | |
Nit (Runnable r, ime niza) | Ustvarite primerek niti z navedenim objektom vmesnika Runnable in z imenom | |
teči | javni void run () | Metoda zagon izvede dejanje za nit. Prikliče nit. |
začetek | javni void start () | Uporablja se za začetek izvajanja niti. Interno JVM kliče metodo run () v tej niti. |
pridruži se | javno prazno pridružitev () | Počakajte, da nit odmre |
javno void pridružitev (dolge milisekunde) | Počakajte določene milisekunde, da nit umre. | |
getPriority | javni int getPriority () | Vrnite prednost niti |
setPriority | public int setPriority (int prioritet) | Spremenite prednost niti v določeno prednost |
getName | javni niz getName () | vrne ime niti. |
setName | public void setName (ime niza) | Ime niti nastavite na določen niz |
currentThread | public Thread currentThread () | Vrne referenco niti, ki je trenutno aktivna |
getId | javni int getId () | Vrnitev niti Id |
getState () | public Thread.State getState () | Vrne trenutno stanje niti |
isAlive | javna logična vrednost isAlive () | Preverite, ali je nit živa, in vrnite true, če je odgovor da. |
donos | javni prazninski donos () | Začasno zaustavi trenutno nit in omogoči izvajanje drugih niti. |
isDaemon | javni logični isDaemon () | Preverite, ali je nit demonska nit; vrni true, če da. |
setDaemon | public void setDaemon (logična b) | Nit nastavite kot nit demona, če je b = true; sicer nastavljeno kot uporabniška nit. |
prekiniti | prekinitev javne praznine () | Prekinite trenutno nit. |
isInterrupted | javno logično isInterrupted () | Preverite, ali je nit prekinjena. |
zmoten | javna statična logična vrednost prekinjena () | Preverite, ali je trenutna nit prekinjena. |
dumpStack | Statično praznjenje dumpStack () | Natisne sled sklada trenutne niti v standardni tok napak. |
začasno ustavi | javno razveljavitev praznine () | Začasno ustavi vse niti. (** metoda je opuščena v najnovejših različicah Java) |
Nadaljuj | javni razveljavitev praznine () | Nadaljujte z visečo nitjo. (** metoda je opuščena v najnovejših različicah Java) |
ustavi se | javna void stop () | Ustavi nit. (** metoda je opuščena v najnovejših različicah Java) |
Te metode niti bomo podrobneje obdelali v naslednji vadnici o večnitnosti.
Zagon niti
Metoda start (), ki se uporablja za zagon niti, izvaja naslednje korake:
- Zažene nov primerek niti z novim CallStackom.
- Stanje niti se spremeni iz novega v izvedljivo.
- Ko je na vrsti nit, izvede metodo run ().
Implementacija vmesnika 'Runnable'
Primerek niti lahko ustvarite tudi z vmesnikom Runnable. Če želite ustvariti primerek niti, mora razred, katerega predmete mora izvajati nit, implementirati vmesnik Runnable.
Vmesnik Runnable ima samo en način:
public void run () => this method is used to execute the thread.
Primer razreda niti
Zdaj pa predstavimo nit v Javi z uporabo razreda niti.
//class inherited from 'Thread' class ThreadClassDemo extends Thread { private int number; //class constructor public ThreadClassDemo(int number) { this.number = number; } //run method => execution code for thread public void run() { int counter = 0; int numInt = 0; //prints the number till specified number is reached, starting from 10 do { numInt = (int) (counter + 10); System.out.println(this.getName() + ' prints ' + numInt); counter++; } while(numInt != number); System.out.println('** Correct! ' + this.getName() + 'printed ' + counter + ' times.**'); } } public class Main { public static void main(String [] args) { System.out.println('Starting thread_1...'); //create a thread class instance Thread thread_1 = new ThreadClassDemo(15); //start the thread thread_1 thread_1.start(); try { //wait for thread_1 to die thread_1.join(); } catch (InterruptedException e) { System.out.println('Thread interrupted.'); } System.out.println('Starting thread_2...'); Thread thread_2 = new ThreadClassDemo(20); //start thread_2 thread_2.start(); System.out.println('main() is ending...'); } }
Izhod
Nit Java z uporabo vmesnika, ki ga je mogoče izvesti
Naslednji primer prikazuje uporabo vmesnika Runnable za ustvarjanje primerka niti.
//class implements Runnable interface class RunnableDemo implements Runnable { private String message; //class constructor public RunnableDemo(String message) { this.message = message; } //run method public void run() { while(true) { System.out.println(message); } } } public class Main { public static void main(String [] args) { //create first thread instance hello Runnable hello = new RunnableDemo('Hello, Greetings!!!'); Thread thread1 = new Thread(hello); thread1.setDaemon(true); //set this thread as daemon thread1.setName('hello'); System.out.println('Starting First thread...'); //start the thread thread1.start(); //create second thread instance bye Runnable bye = new RunnableDemo('Bye for now!!'); Thread thread2 = new Thread(bye); thread2.setPriority(Thread.MIN_PRIORITY); //set priority to min thread2.setDaemon(true); //set as daemon thread System.out.println('Starting goodbye thread...'); //start the thread thread2.start(); System.out.println('main() is ending...'); } }
Izhod
Kako ustaviti nit v Javi
Zgoraj smo videli primere niti. Iz teh primerov vemo, da ko se metoda izvajanja konča, se nit ustavi ali pa se ustavi tudi zaradi nekaterih izjem.
Prejšnje različice Java so imele stop () metodo v razredu Thread, ki jo je bilo mogoče uporabiti za neposredno zaustavitev niti. Toda zdaj je zaradi varnosti opuščen. Zato moramo uporabiti druge metode, da ustavimo nit, ki se izvaja.
Za zaustavitev niti lahko uporabimo dve metodi.
- Uporaba hlapne logične spremenljivke
- Uporaba prekinitev.
V tem poglavju bomo obravnavali oba načina zaustavitve niti.
Uporaba hlapne logične spremenljivke
Pri tej metodi vzdržujemo logično spremenljivko say flag, da zaustavimo nit. Nit se izvaja, dokler je logična spremenljivka nastavljena na true. V trenutku, ko postane napačno, se nit ustavi.
Posebnost te metode je, da logično spremenljivko razglasimo kot » hlapljivo ”, Tako da se vedno bere iz glavnega pomnilnika in ga program ne more predpomniti v predpomnilnik CPU. Tako ne bo nobene razlike v nastavljenih in odčitanih vrednostih.
Izvajanje zaustavitve niti z uporabo hlapne logične spremenljivke je prikazano spodaj.
class StopThread extends Thread { private volatile boolean stop_flag = true; //initially set to true public void stopRunning() { stop_flag = false; //set stop_flag to false } @Override public void run() { while (stop_flag) { //keep checking value of stop_flag System.out.println('Thread is running...'); } System.out.println('Thread stopped!!!'); } } public class Main { public static void main(String[] args) { //create a thread instance StopThread stop_thread = new StopThread(); //start the thread stop_thread.start(); try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } //call stopRunning() method to stop the thread stop_thread.stopRunning(); } }
Izhod
Opomba: Tu smo prikazali le del rezultatov. Nit se lahko pred zaustavitvijo izvaja nekaj minut. Tako da lahko dobimo različne rezultate v različnih sistemih.
Uporaba prekinitev
Tu se nit ustavi z uporabo metode interrupt (), kot smo že omenili zgoraj v metodah razreda niti. Metoda interrupt () nastavi stanje niti kot prekinjeno. To stanje se posreduje zanki while metode run (). Prekinjeno stanje lahko pridobimo z metodo interrupt ().
Naslednji program prikazuje uporabo metode interrupt () za zaustavitev niti.
class StopThread extends Thread { @Override public void run() { while (!Thread.interrupted()) { //check for interrupted status System.out.println('Thread is running...'); } System.out.println('Thread stopped!!!'); } } public class Main { public static void main(String[] args) { //create a thread instance StopThread stop_thread = new StopThread(); //start the thread stop_thread.start(); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } //interrupt the thread stop_thread.interrupt(); } }
Izhod
Pogosto zastavljena vprašanja
V # 1) Zakaj v Javi uporabljamo večnitnost?
Odgovor: Večnitnost omogoča sočasno ali istočasno izvajanje dveh ali več niti v aplikaciji. Sočasno izvajanje maksimizira pretočnost in tudi CPU izkoristi na svoj maksimum.
V # 2) Kaj je večnitnost? Katere so njegove vrste?
Odgovor: Večnitnost pomeni izvajanje več niti. Ta izvedba je lahko sočasna ali vzporedna. Tako ima večnitnost dva tipa, to je sočasno ali vzporedno.
V # 3) Kaj je večnitnost in večprocesorska obdelava?
Odgovor: Pri večnitnosti obstaja več niti za enake ali različne procese in te niti se izvajajo hkrati, da se poveča računalniška hitrost sistema. Pri večprocesorski obdelavi ima sistem več kot dva CPU-ja in več procesov se izvede hkrati.
V # 4) Kakšne so prednosti večnitnosti v Javi?
Odgovor: Z uporabo večnitnosti lahko istočasno izvajamo različne dele aplikacije z uporabo niti. Večnitnost poveča pretočnost sistema. Večnitnost tudi poveča izkoristek procesorja, saj različne niti nenehno uporabljajo CPU.
V # 5) Ali je večnitnost dobra za igre na srečo?
Odgovor: Da, še posebej za sodobne igre.
Zaključek
Tu gre za uvedbo večnitnosti. V tej vadnici smo razpravljali o sočasnosti in večnitnosti v Javi. Razpravljali smo o ustvarjanju niti z razredom Thread in vmesnikom Runnable ter podali ustrezne primere.
Podrobno smo se naučili tudi konceptov ene niti in njenega ustvarjanja. V tej vadnici so obravnavani koncepti niti, vključno z življenjskim ciklom niti, zaustavitvijo niti, vrstami niti itd.
Razpravljali smo tudi o večnitnostih in sočasnosti v Javi. Na koncu te vadnice mora biti bralec zlahka razumel koncepte sočasnosti in večnitnosti ter niti v Javi.
=> Tukaj si oglejte preproste vadbene serije Java.
Priporočeno branje
- Večnitnost v jeziku C ++ z primeri
- Java niti z metodami in življenjskim ciklom
- Thread.Sleep () - metoda spanja Thread () v Javi s primeri
- JAVA Vadnica za začetnike: 100+ praktičnih Javnih video vadnic
- Vadnica za odsev Java s primeri
- Java String vsebuje () Vadnico metode s primeri
- Nazobčan niz v Javi - Vadnica s primeri
- Vadnica razreda Java Scanner Class z primeri