Introducere în ciclul de viață a firelor în Java

Un fir experimentează numeroase faze în ciclul vieții. Cum ar fi, un fir vine pe lume, a început, a alerga, și după asta a murit. Diagrama următoare explică ciclul de viață complet al firului.

  • Thread Constructor produce o fire printr-o nouă stare.
  • Apelarea începe metoda din Thread o poate face prin starea rulantă.
  • Thread Scheduler cu privire la Java rulează acel thread atunci când procesorul primește.
  • Când firul va trece la o stare blocată, va rula din nou, deoarece va reveni la o stare de rulare.
  • Dacă metoda de așteptare este menționată ca thread ar merge la așteptarea statului, aceasta ar trece la starea de rulare la scurt timp după ce va deveni o notificare în toată informația, precum și o metodă de notificare a tuturor.
  • Firul se încheie odată ce metoda rulării se încheie.

Ce este Thread?

Un thread este definit la nivelul Sistemului de operare. Și limba Java, precum și toate celelalte limbi, utilizează, utilizează, utilizează sistemul, care este oferit de sistemul de operare. Din punctul de vedere al dezvoltatorului, un thread este un set de instrucțiuni pe care urmează să le scriem aplicația noastră și să le executăm într-un anumit mod. O aplicație în sine poate fi compusă din mai multe fire. Se pot executa diferite fire simultan. JVM (Java Virtual Machine) funcționează cu mai multe fire. Există fire pentru colectarea gunoiului. Există fire pentru compilatorul Just in Time și alte fire tehnice.

Ciclul de viață al firelor în Java

Mai jos se află diferitele state ale ciclului de viață a firelor în Java:

1. Nou: Un nou thread își începe ciclul de viață în interiorul noii stări. Continuă să fie cu această stare înainte ca programul să înceapă firul. În plus, este cunoscut sub numele de thread creat.

2. Runnable: După ce poate începe un fir născut recent, firul se transformă în runnable. Un fir cu această stare este considerat a efectua procesul lor.

3. În așteptare: Ocazional, o tranziție a thread-ului către așteptarea în jurul stării, chiar dacă thread-ul așteaptă un alt thread pentru a executa o activitate. Un fir de tranziție revine la starea de rulare numai dacă un fir suplimentar indică firul de așteptare pentru a continua.

4. Așteptare cronometrată: Un fir care rulează poate lăsa cu ușurință cronologia particulară care așteaptă ca statul să obțină un interval specific de timp. Un fir cu această stare de tranziții revenind la starea de rulare odată ce intervalul de punct expiră sau dacă evenimentul pe care îl așteaptă cu adevărat se întâmplă.

5. Terminat: Un fir rulant ajunge în starea terminată, deoarece își îndeplinește sarcina sau altfel se termină.

Cum să creați o fire în Java?

Cea mai de bază modalitate de a crea un thread în Java este de a utiliza modelul Runnable. Mai întâi trebuie să creezi o instanță a interfeței Runnable, care este foarte ușoară; există o singură metodă de implementat. Apoi trecem această instanță la constructorul clasei Thread. Și atunci apelăm doar la metoda start () a acestui obiect thread creat, pentru a lansa un nou thread care va rula sarcina înfășurată în obiectul nostru Runnable.

Deci, mai întâi creăm o instanță a unui Runnable. Există o singură metodă de implementat, care se numește metoda run (). Acesta este modelul Java 7 pentru a face asta, cu o instanță a unei clase anonime. Dar putem folosi, de asemenea, o expresie lambda pentru a implementa un Runnable, deoarece există o singură metodă în interfața Runnable.

Să creăm fire pe exemple foarte simple

Vom vedea ce poate merge greșit cu o condiție de cursă care este cu un cod nesincronizat care ar trebui sincronizat și vom rezolva codul nostru folosind sincronizarea. Acest prim exemplu este foarte simplu, este foarte de bază. Este vorba doar de crearea unei sarcini.

ieşire:

O sarcină este o instanță a interfeței Runnable, să o numim runnable și putem implementa această interfață folosind o expresie lambda. Această sarcină este dată unui nou thread și executată în contextul acestui thread. Deci, vom tipări doar numele thread-ului care rulează această sarcină. Eu rulez în … Thread.currentThread () este o metodă statică a clasei Thread care returnează thread-ul care rulează sarcina curentă. Și trebuie doar să apelăm la getName () pe acest obiect thread pentru a returna numele unui thread. Apoi, după ce creăm o instanță de thread t = new thread. Trecerea acestui runnable ca parametru. Deci, acest thread va executa această bucată de cod. Și să-l lansăm. t.start () aceasta este metoda start () la care trebuie să apelăm. Ceea ce putem face, de asemenea, este să dăm un nume explicit al acestui thread folosind t.setName („firul meu”). Și acum putem executa acest cod. Acum, în loc de metoda start (), apelăm la metoda run (), iar dacă rulăm acest cod, problema este că sarcina este executată corect, dar nu este executată în firul creat de noi. Se execută în firul principal care este firul care execută metoda principală. Deci această metodă run () nu ar trebui să fie apelată dacă dorim să lansăm un thread nou.

ieşire:

Metode ale ciclului de viață a firelor în Java

Metodele descrise de Thread simplu sunt prezentate în tabel.

Tipuri de dateNumele metodei firelor
Şir

getName ()

Întoarceți numele acestui thread

intobține prioritate ()

Returnează prioritatea thread-ului

booleaneste in viata()

Încercă dacă acest thread este încă în curs

vida te alatura()

Așteaptă ca acest fir să moară (încheie)

vidalerga()

Ori de câte ori acest thread a fost construit folosind un obiect Runnable individual, după cel care de obicei se numește metoda de rulare a obiectului Runnable; altfel, această metodă nu se va întoarce la fel de bine. Ori de câte ori clasa de thread poate fi extinsă, precum și, metoda run () este suprasolicitată în timpul sub-clasei, atunci se apelează la o metodă run () over-ridden.

vidsetName ( nume string )

Modifică numele cu acest thread pentru a deveni comparabil cu numele argumentului.

vid static

somnul ( lung milis ) aruncă întrerupt / excepție
Face ca firul cu performanță actuală să se odihnească
cantitatea necesară de milisecunde.
vid staticsomnul ( lung de milis, int nanos ) aruncă InterruptException

Aceasta provoacă adormirea firului actual (încetează executarea) atât pentru cantitatea necesară de milisecunde, cât și pentru cantitatea particulară de nanosecunde.

vidstart()

Declanșează aceste fire pentru a începe executarea; Java Virtual Machine numește metoda de rulare a acelui thread.

vid staticRandament()

Declanșează obiectul actual de a întrerupe și permite executarea firelor suplimentare.

Fire staticăcurrentThread ()

Returnează o mențiune a obiectului thread executat în prezent.

Concluzie

  • Simplu să începi să folosești fire, extrem de greu de înțeles.
  • Proiectarea claselor care conțin metode care pot fi securizate prin thread este dificilă.
  • Citiți: JavaDoc pentru a obține clasa java.lang.Thread

Articol recomandat

Acesta a fost un Ghid pentru ciclul de viață Thread în Java. Aici discutăm ce este firul? și diferite stări ale ciclului de viață al firului, împreună cu crearea firelor în java. Puteți parcurge și alte articole sugerate pentru a afla mai multe -

  1. Cadre în Java
  2. Modele de stele în Java
  3. Sortare Merge în Java
  4. Cele mai bune compilatoare Java
  5. Metoda statică în PHP