thread sleep thread sleep method java with examples
En aquest tutorial, parlarem del mètode Thread Sleep () a Java. Veurem com funciona el mètode Thread.Sleep () amb l'ajut d'Exemples:
El java.lang.Thread.sleep (mil·lis llargs) mètode és el mètode proporcionat per la classe Thread que posa en suspens el fil en curs. Especificarem el temps de son com a argument del mètode de son.
=> Feu una ullada a la guia per a principiants de Java aquí
Què aprendreu:
Mètode Thread Sleep () a Java
La classe Thread de Java proporciona dues variants del mètode de son.
A continuació es descriu el prototip de les dues variants del mètode sleep ().
# 1) Variant del mètode de son # 1
Prototip: el somni públic buit estàtic (mil·lis llargs) genera InterruptedException
Paràmetres: millis => la durada del temps en mil·lisegons durant els quals el fil dorm.
Valor de retorn: buit
Llançaments:
- IllegalArgumentException => si el milis és negatiu
- InterruptedException => si algun altre fil interromp el fil actual. Quan es produeix aquesta excepció, s’esborra l’estat interromput del fil.
Descripció: Aquesta variació del mètode de son fa que el fil actual dormi o atura temporalment la seva execució durant el nombre determinat de mil·lisegons (proporcionat a l'argument del mètode). Tanmateix, mentre dorm, el fil no perd la propietat del monitor ni del bloqueig.
# 2) Variant del mètode de son # 2
Prototip: el so públic buit estàtic (mil·lis llargs, nanos int) genera InterruptdException
Paràmetres:
millor programa per convertir fitxers de vídeo
- millis => la durada en mil·lisegons durant la qual el fil ha de dormir.
- nanos => nanosegons addicionals per als quals el fil pot dormir. L'interval és del 0 al 999999.
Valor de retorn: buit
Llançaments:
- IllegalArgumentException => si el valor en mil·lis és negatiu o el valor nanos si està fora de rang.
- InterruptedException => si algun altre fil interromp el fil actual. L'estat interromput del fil s'esborra quan es produeix aquesta excepció.
Descripció: Aquesta variant del mètode de suspensió fa que el fil l’inviti a dormir o detingui temporalment la seva execució durant el nombre de mil·lisegons donat. (primer argument en una crida a mètode). A més, també va proporcionar el nombre de nanosegons (segon argument en una trucada de mètode) per dormir.
Tingueu en compte que la precisió i precisió del temps especificat depèn dels temporitzadors i programadors del sistema. Quan el fil dorm, la propietat del pany o del monitor no es canvia.
Mètode de treball del fil
Sempre que un fil dorm o es suspèn, ho fa el planificador. El mètode Thread.sleep () es comunica amb el planificador de fils perquè el planificador pugui fer canviar el fil actualment en curs per esperar l'estat durant una durada determinada.
Un cop finalitzat aquest temps especificat, l'estat del fil es canvia a 'executable' perquè pugui esperar que la CPU continuï amb l'execució.
Per tant, la durada del temps que dorm el fil depèn del planificador i no del mètode. Com que el planificador forma part del sistema operatiu, l'arquitectura del sistema operatiu també juga un paper en els canvis d'estat del fil.
Ara que hem vist el mètode Thread.sleep () en detall, hauríem de tenir en compte alguns dels punts en utilitzar aquest mètode.
Els indicadors inclouen:
# 1) El mètode Thread.sleep () sempre posa en pausa l'execució del fil actual.
# 2) La durada real durant la qual dorm el fil depèn dels planificadors i temporitzadors del sistema.
Per exemple, per a un sistema molt ocupat, el temps de repòs del fil pot ser més llarg que l'especificat mentre que, per al sistema que no està tan ocupat, pot estar més o menys a prop d'un temps especificat.
# 3) Mentre el fil dorm, no perd cap pany ni monitor que havia adquirit abans de dormir.
# 4) El fil actual que està en repòs pot ser interromput per qualsevol altre fil. En aquest cas, es llança 'InterruptedException'.
Exemple Thread.sleep a Java
Passem ara a un exemple que demostra el mètode del son. Aquí tenim una classe de fils que té un mètode run (). Al mètode run () anomenem ‘Thread.sleep (1000)’. A continuació, a la funció principal, creem dues instàncies d’aquest fil, és a dir, dos fils. A continuació, iniciem els fils.
A la sortida, observem que, a mesura que s’executen els dos fils, els fils es programen un darrere l’altre, és a dir, quan un dorm, l’altre s’està executant.
Exemple:
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(); } }
Sortida:
Quan observem la sortida, trobem que Thread_0 i Thread_1 s’executen per torns.
els proveïdors d’informàtica en núvol ofereixen els seus serveis com
Thread.sleep () Amb un valor de temps de son negatiu
A continuació, demostrem un altre exemple del mètode Thread.sleep (). Aquí hem considerat un cas especial de valor negatiu del temps de son. El programa és similar al programa anterior, però el temps de son proporcionat és de -500.
Exemple:
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(); } }
Sortida:
A la sortida, podem veure que el mètode ha generat 'IllegalArgumentException', ja que el valor negatiu del temps de son no és acceptable.
Preguntes freqüents
P # 1) Com funciona el son de fils a Java?
Resposta: Quan es repeteix sleep () al fil amb un temps especificat en mil·lisegons, el fil deixa de ser executat. Renuncia a la CPU. D'aquesta manera, durant la durada en què el fil està adormit, els altres fils poden utilitzar la CPU.
Q # 2) Què és rendiment () i sleep () al fil de Java?
Resposta: El mètode sleep () del fil fa que el fil renunciï a la CPU i cessi l'execució. Mentre aquest fil dorm, els altres fils adquireixen CPU. Això ho fa el planificador.
El mètode rendiment () també fa que el fil renunciï al control de la CPU quan es crida, però el mètode sleep () presenta un comportament més determinat en comparació amb rendiment ().
P # 3) Com podeu evitar que un fil de Java vagi a dormir?
Resposta: Deixem de dormir el fil Java mitjançant el mètode interrupt (). Qualsevol fil que estigui esperant o que dormi es pot interrompre invocant el mètode interrupt () de la classe Thread.
Q # 4) Podem matar un fil a Java?
Resposta: No, el fil no es mata a Java. En canvi, el fil s’atura a Java. El fil finalitza i es pot tancar amb gràcia. Sovint fem servir un camp booleà volàtil que es comprova periòdicament si hi ha canvis en els valors, de manera que podem acabar el fil.
P # 5) Per què somni () és un mètode estàtic?
proves funcionals vs proves no funcionals
Resposta: En trucar al mètode sleep () per fer dormir el fil, sempre el cridem mitjançant la classe Thread.
Per exemple , Thread.sleep (1000);
La trucada anterior funciona en el context del fil actual i posa en suspensió el fil actual. Mai anomenem el mètode mitjançant una instància de fil específica. Per tant, el mètode és estàtic.
Conclusió
En aquest tutorial, hem parlat del mètode sleep () dels fils a Java. El mètode Sleep () fa que el fil actual que s’està executant deixi d’executar-se durant un temps especificat que es proporciona com a argument del mètode sleep.
El planificador del sistema funciona amb el mètode de suspensió per posar el fil actual en estat d’espera. Mentre el fil dorm, continua tenint els panys o monitors que ha adquirit. Quan passem un valor negatiu del temps de son al mètode de son, genera 'IllegalArgumentException'.
Quan passem un valor de temps de son vàlid al mètode sleep (), els altres fils prendran el torn per executar-se mentre dorm el fil actual.
=> Consulteu aquí per veure aquí A-Z de tutorials de formació.
Lectura recomanada
- Multithreading a Java: tutorial amb exemples
- Multithreading en C ++ amb exemples
- Java sincronitzat: què és la sincronització de fils a Java
- Fils de Java amb mètodes i cicle de vida
- Tutorial de cadenes de Java | Mètodes de cadena Java amb exemples
- Com s'utilitza el mètode Java toString?
- TreeMap a Java: tutorial amb exemples de Java TreeMap
- Tutorial JAVA per a principiants: més de 100 tutorials pràctics de vídeo Java