Multithreading în Java explicat [cu exemple]

Publicat: 2021-06-15

Cuprins

Fire în Java

Thread-urile în Java ajută la funcționarea eficientă a unui program. Cele două unități de bază de execuție a proformei sunt procesul și firele. Un proces poate fi o aplicație, un program sau un mediu de execuție autonom.

În timp ce firele de execuție partajează o resursă cu cea a procesului și există cu aceasta. Cel puțin un fir este prezent în fiecare aplicație java numită fir principal. Din firul principal pot fi create mai multe fire. Aflați mai multe despre cum să creați un fir în Java.

Beneficiile Java Thread

  • Sunt necesare mai puțin timp și resurse pentru a crea un fir în comparație cu procesele. Prin urmare, firele sunt numite și un proces ușor.
  • Datele și codul procesului părinte sunt partajate de fire.
  • Intercomunicarea între fire este ușoară în comparație cu intercomunicarea într-un proces.
  • Thread-urile în Java pot fi create prin implementarea java.lang. Interfață rulabilă.

Un singur fir

Într-un program sunt prezente mai multe unități de procesare, dintre care cea mai mică este denumită fir unic. Prin utilizarea „clasei de fire” Java aplică firele. Există două tipuri de fire; firul daemon și firul utilizatorului.

Când aplicația urmează să fie curățată, apare utilizarea firului de demon. Se rulează în fundalul unei aplicații. În timp ce firele de execuție ale utilizatorului sunt create atunci când aplicația începe pentru prima dată.

Avantajele unui singur fir:

  • Încărcarea aplicației este redusă pe măsură ce execuția unui singur fir are loc într-un sistem.
  • Costul de întreținere al aplicației este redus prin utilizarea firelor simple.

Multitasking în Java

Multitasking se referă la procesul de execuție a mai multor sarcini de către CPU în același timp. Uneori, comutarea CPU poate fi efectuată între sarcini de către utilizator pentru a colabora împreună cu fiecare program. Memorie și resurse separate sunt alocate proceselor în multitasking. În două moduri, multitasking-ul poate fi realizat.

1. Multiprocesare (multitasking bazat pe proces)

  • Pentru fiecare proces este alocată o zonă de memorie separată. Prin urmare, există o adresă pentru fiecare proces în memorie.
  • Procesele sunt grele.
  • Există un cost ridicat de comunicare între procese.
  • Este nevoie de ceva timp pentru comutarea între procese. Acest lucru este necesar pentru actualizarea listelor, hărților de memorie etc.

2. Multithreading (multitasking bazat pe thread)

  • Aceeași adresă este partajată între fire.
  • Firele sunt ușoare.
  • Există un cost de comunicare scăzut între fire.

Ce este Multithreading?

Când două sau mai multe fire de execuție într-un program se execută simultan, mecanismul este denumit multithreading. Un singur proces creează multe fire care cresc puterea de calcul. Două sau mai multe părți ale unui program sunt executate într-un mod care duce la utilizarea maximă a CPU.

Threadurile sunt denumite părți individuale ale programului. Procesele dintr-o aplicație pot conține fie mai multe fire, fie un singur thread.
Mai multe fire ale unei aplicații sunt permise de mașina virtuală Java. Fiecare fir are propria sa prioritate. Prin urmare, preferința de execuție este dată firelor de execuție cu o prioritate mai mare decât cele cu o prioritate mai mică.

Pentru a realiza multitasking, se utilizează atât procesul de multithreading, cât și de multiprocesare. Deoarece o zonă de memorie partajată este utilizată în multithreading, aceasta este folosită mai ales în multiprocesare. Memoria este salvată deoarece nu este necesară o alocare suplimentară de memorie. Mai mult, timpul necesar este mai mic decât multiprocesarea, deoarece se produce schimbarea contextului între fire.

În animație, jocuri, este folosit Java multithreading . Faceți clic dacă doriți să aflați mai multe despre arhitectura și componentele Java.

Două mecanisme pot fi folosite pentru a crea fire.

1. Extensie de clasă de fire

2. Implementarea interfeței rulabile

Clasa de fir vs interfață rulabilă

  • Extinderea „clasei Thread” nu poate extinde alte clase, deoarece moștenirile multiple nu sunt acceptate în Java. Dar odată cu implementarea interfeței „Runnable”, alte clase de bază pot fi extinse din clasă.
  • Funcționalitatea de bază a unui thread poate fi extinsă prin extinderea clasei Thread, deoarece sunt furnizate metode încorporate, cum ar fi interrupt(), yield(), etc.
  • Un obiect pe care îl pot partaja mai multe fire de execuție va fi furnizat atunci când este folosit rulabil.

Clasa Java Thread

Programarea thread-urilor în Java se realizează prin clasa thread-ului. Constructorii sunt furnizați de clasa thread și metodele pentru efectuarea operațiunilor thread. O clasă thread implementează o interfață rulabilă și extinde clasa Object.

Câteva metode comune utilizate sunt:

  1. start(): Execuția firului este începută prin această metodă. Metoda run() este apelată de JVM.
  2. sleep(int milisecunde): Execuția firului de execuție este întreruptă pentru milisecunde, care este furnizată pe măsură ce procesul de threading este pus în stare de adormire prin această metodă. După pauză, execuția firului începe din nou. Firele pot fi sincronizate prin această metodă.
  3. getName(): Numele firului este returnat prin această metodă.
  4. setPriority(int new priority): Prioritatea firului este schimbată prin această metodă.
  5. yield (): Firul curent este oprit odată cu execuția celorlalte fire prin această metodă.
  6. run(): Metoda este pentru a începe o acțiune în fir.
  7. getPriority(): Prioritatea firului este returnată prin utilizarea acestei metode.
  8. setName(): Numele firului este schimbat prin această metodă.
  9. getId(): ID-ul firului este returnat prin această metodă.
  10. suspend(): Firul este suspendat prin această metodă.

Ciclul de viață al firului

Ciclul de viață al firului are mai multe etape, care sunt enumerate mai jos:

  1. Nou: „Clasa de fire” este folosită pentru a crea un fir în această etapă. Până la pornirea firului, programul rămâne în această etapă. Metoda se mai numește și firul născut.
  2. Rulabil: metoda de pornire invocă instanța firului în această etapă a ciclului de viață al firului. Planificatorul este predat cu controlul firului de execuție pentru finalizarea execuției. Dacă firul ar trebui executat sau nu depinde de planificator.
  3. Derulare: Odată ce execuția firului de execuție este începută, etapa este mutată la etapa de „rulare”. Un fir este selectat de către planificator din grupul de fire și începe execuția aplicației.
  4. În așteptare : După cum sugerează și numele, în această fază a ciclului de viață firul așteaptă. Sincronizarea firelor este esențială datorită rulării mai multor fire într-o aplicație. Prin urmare, este necesar ca un thread să aștepte, până când execuția celuilalt thread se încheie. Prin urmare, etapa ciclului de viață este cunoscută și ca etapa de așteptare.
  5. Moartă: etapa în care are loc terminarea firului este denumită etapa „moartă”. Odată ce firul de execuție este transferat de la rulare la sfârșitul procesării, acesta se încheie și, prin urmare, este în „starea moartă”

Sincronizarea firelor în Java

Comportamentul asincron apare într-un program în cazul multithreading-ului. Dacă se presupune că datele sunt scrise printr-un fir de execuție și citirea datelor este efectuată de un alt fir de execuție simultan, s-ar putea crea inconsecvență în aplicație.

Resursele care sunt partajate între fire trebuie să fie accesate de alte fire. Prin urmare, în astfel de cazuri, se abordează abordarea sincronizării. Metodele sincronizate sunt disponibile în Java pentru a obține un comportament de sincronizare.

Când un fir de execuție ajunge la blocul sincronizat, apoi odată ce ajunge, metoda nu poate fi apelată de alte fire de execuție pe același obiect. Până când thread-ul termină de executat blocul și iese din el, celelalte fire trebuie să se oprească și să aștepte.

Învață cursuri de software online de la cele mai bune universități din lume. Câștigă programe Executive PG, programe avansate de certificat sau programe de master pentru a-ți accelera cariera.

Avantajele Multithreadingului

  • Pot fi efectuate mai multe operații în același timp. Cu firele independente care rulează, utilizatorul nu este blocat.
  • Se economisește timp pe măsură ce mai multe operațiuni rulează împreună.
  • Un thread nu poate fi afectat de un alt thread deoarece sunt independente. Apariția unei excepții într-un fir nu afectează execuția altor fire.

Exemplu de multithreading

Un exemplu de program multithreading în java a fost prezentat mai jos:

Sursă

Figura 1: Un fragment din exemplul de cod multithreading

Explicația codului

Linia 3: Clasa „GuruThread1” implementează runnable.

Linia 8: Afișează metoda principală a clasei.

Linia 9: Clasa de fir este instanțiată și este creată o instanță „guruThread1″ și este creat un fir.

Linia 10: „Clasa Thread” este instanțiată și se creează o instanță „guruThread2” și un fir.

Linia 11: Firul numit guruThread1 este pornit.

Linia 12: Firul numit guruThread2 este pornit.

Linia 13: este afișat textul „Numele firelor sunt următoarele:”.

Linia 14: Metoda getName() este folosită pentru a obține numele thread1.

Linia 15: Metoda getName() este folosită pentru a obține numele thread2.

Executarea codului de mai sus are ca rezultat următoarea ieșire:

Sursă

Figura: O captură de ecran a rezultatului generat din programul multithreading în Java (preluat din

Concluzie

Articolul a discutat conceptul de multithreading în Java împreună cu un exemplu de program multithreading în java. Învățarea ta nu se oprește aici și te înțelegi cu toate celelalte concepte de bază ale Java.

Dacă sunteți interesat să vă stăpâniți abilitățile de programare la un preț prietenos și să vă pregătiți pentru industrie, puteți verifica cursul oferit de upGrad „Master of Science in Computer Science”. Este pentru toți profesioniștii de nivel mediu din grupa de vârstă de 21 până la 45 de ani. Cursul este certificat de Universitatea Liverpool John Moores și este conceput cu peste 500 de ore de învățare, 309 proiecte și sarcini pentru a aduce tot ce este mai bun din tine. Dacă aveți întrebări, trimiteți-ne un mesaj, echipa noastră vă va contacta.

Aterizează la locul de muncă visat

Aplicați pentru Programul Executive PG în Dezvoltare Software de la IIIT-B