Cum se creează un thread în Java? | Multithreading în Java

Publicat: 2020-12-29

În acest articol, vom arunca o privire asupra threading-ului în Java și vom explora mecanismele care fac posibilă threading-ul.

Cuprins

Threading în Java

Caracteristica de threading din Java este un sub-proces ușor. Este considerată cea mai mică unitate de procesare. Este un mijloc de a realiza multitasking într-un program. Este o caracteristică utilă când vine vorba de jocuri, animație etc.

Java are suport încorporat pentru crearea de fire și mai multe fire. Aceasta este o abordare inteligentă pentru reducerea la minimum a ineficiențelor și a tragului prin utilizarea optimă a spațiului CPU. În Java, acest lucru se poate face în două moduri:

  1. Extindeți clasa Thread sau
  2. Implementați interfața rulabilă

Când mai multe fire de execuție sunt executate simultan, se numește multithreading. Acest lucru permite, în esență, mai multe părți ale unui program să ruleze simultan, fiecare parte a unui fir și fiecare fir de execuție urmând o cale distinctă de execuție.

Threadurile utilizează spațiu de memorie partajat; memoria nu este alocată fiecărei părți, ceea ce duce la utilizarea maximă a procesorului. În plus, schimbarea contextelor nu necesită mult timp. Cu toate acestea, prea multe fire de execuție ar putea angaja CPU-ul în schimbarea contextului, iar execuția dvs. ar putea fi întârziată.

Un fir poate exista într-una dintre următoarele șase state

  1. NOU – de îndată ce un fir este creat, acesta există în noua stare. În esență, înseamnă că firul încă nu a început execuția.
  2. RUNNING – când un fir de execuție este în curs de execuție sau este în linie pentru a fi executat, acesta este în stare de rulare.
  3. AȘTEPTARE – un fir de execuție este uneori oprit sau suspendat pentru a permite o altă activitate. O versiune fără time-out a wait() sau join() poate suspenda executarea unui fir. Odată ce acțiunea a avut loc, un fir suspendat este reluat.
  4. TIMED-WAITING – un fir de execuție este uneori oprit sau suspendat temporar pentru o anumită durată. De exemplu, când funcția sleep() este apelată.
  5. BLOCAT – când un fir Java suspendat nu poate achiziționa o anumită resursă, acesta este blocat și există în starea blocată.
  6. TERMINAT – atunci când un fir și-a încheiat execuția, acesta există în starea terminată. Cu toate acestea, puteți încheia un thread în orice moment.

Aflați mai multe despre arhitectura și componentele Java.

Beneficiile creării unui fir în Java

Există mai multe avantaje în a crea fire. Unele dintre acestea sunt

  1. Deoarece firele de execuție sunt independente, o execuție nu o afectează pe alta chiar și atunci când funcționează pe spațiu de memorie partajat. Aceasta înseamnă, de asemenea, că puteți efectua mai multe operații simultan.
  2. Threadingul este o formă de multitasking și economisește timp.
  3. O eroare într-un fir nu afectează altul.

Cum se creează un fir în Java?

După cum sa discutat mai sus, există două moduri de a face acest lucru: Extindeți clasa Thread sau Implementați interfața rulabilă

Clasa de fire

Există constructori și metode în clasa Thread care vă permit să efectuați operații, să gestionați și să urmăriți firele. Extinde clasa Object care apoi implementează interfața însoțitoare Runnable. Constructorii prezenți în clasa thread sunt : Thread(), Thread(Nume șir), Thread(Runnable r) și Thread(Runnable r, String name).

Mai jos sunt metodele și descrierile acestora

Metodă La ce se foloseste?
start() Începe execuția
alerga() Pentru a rula o acțiune pentru un fir
dormi() Afișează un fir în repaus pentru o anumită durată
a te alatura() Așteptați până când se încheie un alt fir
getPriority() Pentru a indica prioritatea unui fir dat
stabilește prioritatea() Pentru a modifica prioritatea unui fir dat
getName() Pentru a returna numele unui fir specificat
Pune un nume() Pentru a schimba numele firului specificat
getId() Pentru a returna ID-ul unui fir dat
este in viata() Pentru a testa dacă un fir mai există în cineva din statele
Randament() Întrerupe execuția unui obiect fir pentru a permite rularea unui alt fir de execuție
suspenda() Pentru a suspenda un anumit thread
relua() Pentru a relua un fir din starea suspendată
Stop() Pentru a opri un anumit thread
distruge() Pentru a distruge grupul și subgrupurile de fire
întrerupe() Pentru a provoca o întrerupere în execuția firului
este întreruptă() Pentru a testa dacă execuția unui fir dat este întreruptă
întrerupt() Pentru a testa dacă execuția curentă a firului de execuție este întreruptă
activeCount() Pentru a returna numărul de fire active dintr-un grup de fire
holdLock() Returnează adevărat dacă și numai dacă firul curent deține blocarea monitorului pe obiectul specificat.
getState() Pentru a determina starea unui fir dat
setContextClassLoader() Pentru a seta contextul ClassLoader
getContextClassLoader() Pentru a returna contextul ClassLoader

Pentru a crea un thread prin extinderea clasei Thread, mai întâi trebuie creată o clasă care extinde clasa java.lang.Thread. Această clasă este definită pentru a suprascrie metoda run(). Apoi, un obiect este creat în noua clasă care urmează prin apelarea metodei start() pentru a începe execuția firului.

Trebuie să citiți: Programe de modelare în Java pe care ar trebui să le verificați

Interfață rulabilă

Acesta este cel mai simplu mod de a crea un fir. Este necesară o singură metodă pentru a implementa interfața rulabilă: run()

Pentru a o declara, scriem

public void run()

În interiorul run( ), trecem la scrierea codului pentru a crea un fir nou.

Înscrieți-vă la cursurile de inginerie software 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.

Clasa de fir vs interfață rulabilă

Clasa Thread vă împiedică să extindeți orice altă clasă. Acest lucru se datorează faptului că moștenirea multiplă nu este posibilă în Java. Cu toate acestea, acesta nu este cazul când implementăm interfața Runnable în care continuați să extindeți alte clase.

Extinderea clasei Thread face accesibile pentru dvs. câteva metode importante care îmbunătățesc funcționalitatea unui fir. De exemplu, yield(), stop(), isalive(), întrerupere(). Interfața Runnable are o singură metodă care este destul de limitativă.

Încheierea

Dacă sunteți interesat să aflați mai multe despre Java, dezvoltarea de software full-stack, consultați programul Executive PG de la upGrad și IIIT-B în dezvoltarea de software full-stack, care este conceput pentru profesioniști care lucrează și oferă peste 500 de ore de formare riguroasă, 9+ proiecte și sarcini, statutul de absolvenți IIIT-B, proiecte practice practice și asistență pentru locuri de muncă cu firme de top.

Aterizează la locul de muncă visat

Aplicați acum pentru masterat în inginerie software