thread sleep thread sleep method java with examples
În acest tutorial, vom discuta metoda Thread Sleep () în Java. Vom vedea cum funcționează metoda Thread.Sleep () cu ajutorul exemplelor:
java.lang.Thread.sleep (milis lung) metoda este metoda furnizată de clasa Thread care pune firul care rulează în mod curent în somn. Vom specifica timpul de somn ca argument al metodei de somn.
=> Consultați aici Ghidul pentru începători Java.
Ce veți învăța:
Thread Sleep () Metodă în Java
Clasa Thread din Java oferă două variante ale metodei de somn.
Prototipul ambelor variante ale metodei sleep () este descris mai jos.
# 1) Varianta metodei de somn # 1
Prototip: somnul public static gol (milis lungi) aruncă InterruptedException
Parametri: milis => durata de timp în milisecunde pentru care firul doarme.
Valoare returnată: nul
Aruncă:
- IllegalArgumentException => dacă milis este negativ
- InterruptedException => dacă orice alt fir întrerupe firul curent. Când apare această excepție, starea întreruptă a firului este ștearsă.
Descriere: Această variantă a metodei de somn face ca firul curent să adoarmă sau oprește temporar execuția acestuia pentru numărul dat de milisecunde (furnizat în argumentul metodei). Cu toate acestea, în timpul somnului, firul nu pierde monitorul și nu blochează calitatea de proprietar.
# 2) Varianta metodei de somn # 2
Prototip: somnul public static (milis lungi, int nanos) aruncă InterruptdException
Parametri:
care companie este în prezent liderul în servicii de găzduire web bazate pe cloud?
- millis => durata în milisecunde pentru care firul trebuie să doarmă.
- nanos => nanosecunde suplimentare pentru care firul poate dormi. Gama este 0 - 999999.
Valoare returnată: nul
Aruncă:
- IllegalArgumentException => dacă valoarea milis este negativă sau valoarea nanos dacă este în afara intervalului.
- InterruptedException => dacă orice alt fir întrerupe firul curent. Starea întreruptă a firului este ștearsă atunci când apare această excepție.
Descriere: Această variantă a metodei de repaus face ca firul să-l invoce la repaus sau să oprească temporar execuția acestuia pentru numărul dat de milisecunde. (primul argument într-un apel de metodă). În plus, a furnizat și numărul de nanosecunde (al doilea argument într-un apel de metodă) pentru dormit.
Rețineți că acuratețea și precizia timpului specificat depind de temporizatoarele și planificatoarele sistemului. Când firul este în repaus, proprietatea încuietorii sau a monitorului nu se schimbă.
Metoda de lucru a firului. Sleep
Ori de câte ori un fir doarme sau este suspendat, acesta este realizat de programator. Metoda Thread.sleep () comunică cu planificatorul de fire, astfel încât planificatorul să poată provoca modificarea firului de rulare curent pentru a aștepta starea pentru o anumită durată.
începe un proiect Java în eclipsă
Odată ce acest timp specificat s-a terminat, starea firului se schimbă în „runnable”, astfel încât să poată aștepta ca CPU să continue cu execuția.
Astfel, durata pentru cât durează firul de lucru depinde de planificator și nu de metodă. Deoarece planificatorul face parte din sistemul de operare, arhitectura sistemului de operare joacă, de asemenea, un rol în schimbările de stare ale firului.
Acum, că am văzut în detaliu metoda Thread.sleep (), ar trebui să ținem cont de câteva puncte în timp ce folosim această metodă.
Indicatorii includ:
# 1) Metoda Thread.sleep () întrerupe întotdeauna execuția firului curent.
#Două) Durata reală pentru care firul de dormit depinde de planificatoare și temporizatoare de sistem.
De exemplu, pentru un sistem foarte ocupat, timpul de somn al firului poate fi mai lung decât cel specificat, în timp ce, pentru sistemul care nu este atât de ocupat, ar putea fi mai mult sau mai puțin aproape de un timp specificat.
# 3) În timp ce firul doarme, nu pierde nicio încuietoare sau monitoare pe care le dobândise înainte de culcare.
# 4) Firul curent aflat în repaus poate fi întrerupt de orice alt fir. În acest caz, „InterruptedException” este aruncat.
Exemplu Thread.sleep În Java
Să trecem acum la un exemplu care demonstrează metoda somnului. Aici avem o clasă de fire care are o metodă run (). În metoda run () numim „Thread.sleep (1000)”. Apoi, în funcția principală, creăm două instanțe ale acestui fir, adică două fire. Apoi începem firele.
În ieșire, observăm că, pe măsură ce ambele fire rulează, firele sunt programate unul după altul, adică atunci când unul doarme, celălalt rulează.
Exemplu:
class SleepThread extends Thread { //run method for thread public void run() { for(int i=1;i<5;i++) { try { //call sleep method of thread Thread.sleep(1000); }catch(InterruptedException e){System.out.println(e);} //print current thread instance with loop variable System.out.println(Thread.currentThread().getName() + ' : ' + i); } } } class Main{ public static void main(String args()) { //create two thread instances SleepThread thread_1 = new SleepThread(); SleepThread thread_2 = new SleepThread(); //start threads one by one thread_1.start(); thread_2.start(); } }
Ieșire:
Când observăm ieșirea, descoperim că Thread_0 și Thread_1 se execută pe rând.
Thread.sleep () Cu valoare negativă a timpului de somn
În continuare, să demonstrăm un alt exemplu de metodă Thread.sleep (). Aici am considerat un caz special al unei valori negative a timpului de somn. Programul este similar cu programul de mai sus, dar timpul de somn furnizat este de -500.
Exemplu:
class SleepThread extends Thread { public void run() { for(int i=1;i<5;i++) { try { //call sleep method with negative value of time Thread.sleep(-500); }catch(InterruptedException e){System.out.println(e);} System.out.println(i); } } } class Main{ public static void main(String args()) { //create two thread instances SleepThread t1=new SleepThread(); SleepThread t2=new SleepThread(); //start the threads one by one t1.start(); t2.start(); } }
Ieșire:
Din rezultat, putem vedea că metoda a aruncat „IllegalArgumentException”, deoarece valoarea negativă a timpului de somn nu este acceptabilă.
întrebări frecvente
Q # 1) Cum funcționează sleep sleep în Java?
Răspuns: Când somnul () este apelat pe fir cu o durată specificată de timp în milisecunde, firul își încetează execuția. Renunță la procesor. Astfel, în perioada în care firul este adormit, celelalte fire pot folosi CPU.
Q # 2) Ce este randamentul () și somnul () în firul Java?
Răspuns: Metoda sleep () a firului determină firul să renunțe la CPU și să înceteze execuția. În timp ce acest fir adorm, celelalte fire dobândesc CPU. Acest lucru este realizat de programator.
Metoda yield () determină, de asemenea, firul să renunțe la controlul procesorului atunci când este apelat, dar metoda sleep () prezintă un comportament mai determinat în comparație cu yield ().
Q # 3) Cum opriți un fir Java de a merge la culcare?
Răspuns: Oprim firul Java să nu mai folosească metoda interrupt (). Orice fir care așteaptă sau doarme poate fi întrerupt invocând metoda interrupt () a clasei Thread.
Q # 4) Putem ucide un fir în Java?
Răspuns: Nu, firul nu este ucis în Java. În schimb, firul este oprit în Java. Firul este terminat și apoi se poate închide grațios. Folosim adesea un câmp boolean volatil care este verificat periodic pentru orice modificare a valorilor, astfel încât să putem termina firul.
Q # 5) De ce somnul () este o metodă statică?
Răspuns: Când apelăm metoda sleep () pentru a pune firul în somn, îl apelăm întotdeauna folosind clasa Thread.
De exemplu , Thread.sleep (1000);
Apelul de mai sus funcționează în contextul firului curent și pune firul curent în repaus. Nu apelăm niciodată metoda folosind o instanță de fir specifică. Astfel metoda este statică.
Concluzie
În acest tutorial, am discutat despre metoda sleep () a firelor în Java. Metoda Sleep () face ca firul curent care se execută să înceteze executarea acestuia pentru o anumită perioadă de timp, care este furnizat ca argument pentru metoda sleep.
servicii web testarea întrebărilor și răspunsurilor la interviu
Planificatorul de sistem funcționează cu metoda de repaus pentru a pune firul curent în starea de așteptare. În timp ce firul doarme, acesta continuă să dețină încuietorile sau monitoarele pe care le-a achiziționat. Când transmitem o valoare negativă a timpului de somn metodei de somn, aceasta aruncă „IllegalArgumentException”.
Când trecem o valoare validă a timpului de somn la metoda sleep (), celelalte fire vor lua rândul să se execute în timp ce firul curent doarme.
=> Verificați aici pentru a vedea A-Z a tutorialelor de instruire Java aici.
Lectură recomandată
- Multithreading în Java - Tutorial cu exemple
- Multithreading în C ++ cu exemple
- Java sincronizat: Ce este sincronizarea firului în Java
- Fire Java cu metode și ciclu de viață
- Tutorial Java String | Metode Java String cu exemple
- Cum se folosește metoda Java toString?
- TreeMap în Java - Tutorial cu exemple de TreeMap Java
- Tutorial JAVA pentru începători: peste 100 de tutoriale video Java practice