CodeGym/Blog Java/Aleatoriu/Metoda Thread.sleep() în Java
John Squirrels
Nivel
San Francisco

Metoda Thread.sleep() în Java

Publicat în grup
În programele Java, există situații în care un thread se execută prea repede sau programul trebuie să treacă la un alt thread. Pentru a face acest lucru, trebuie să suspendați execuția firului curent. În Java, acest lucru se poate face folosind metoda java.lang.Thread.sleep() .

Metoda Thread.sleep().

Clasa Thread este prezentă în pachetul Java.lang și conține metoda Thread.sleep( ) . Metoda Java.lang.thread sleep() este utilizată pentru a suspenda firul de execuție curent pentru o anumită perioadă de timp în milisecunde. Dacă vă uitați la Oracle docs , veți descoperi că există două metode sleep() supraîncărcate ale clasei Thread .
static void sleep(long millis)
unde milis este timpul în milisecunde. Această metodă face ca firul de execuție în curs de stingere (oprește temporar execuția, „sleeping”) pentru milisecunde, în funcție de precizia temporizatoarelor și programatorilor sistemului. Valoarea argumentului pentru milisecunde nu poate fi negativă. Dacă da, IllegalArgumentException va fi aruncată.
static void sleep(long millis, int nanos)
unde se mărește timpul în milisecunde și nanos este timpul în nanosecunde. Această variantă de metodă este utilizată pentru a suspenda execuția firului curent pentru timpul exact în milisecunde și nanosecunde. Valoarea nanosecunde este valabilă între 0 și 999999. Să creăm un program simplu care folosește metoda Thread.sleep() pentru a întrerupe execuția firului principal timp de 5 secunde:
public class SleepDemo {

       public static void main(String[] args) throws InterruptedException {
           //the current time in milliseconds
           long start = System.currentTimeMillis();
           // stop the main thread of the program for 5000 milliseconds (5 seconds)
           Thread.sleep(5000);
           System.out.println("The thread is paused for " + (System.currentTimeMillis() - start) + " milliseconds");
       }
}
Ce se întâmplă în acest program? Mai întâi pornește, apoi se așteaptă timp de 5 milisecunde (5 secunde), apoi imprimă pe consolă un mesaj despre cât timp a fost înghețat și apoi iese. Ieșirea este:
Firul este întrerupt timp de 5008 milisecunde
După cum puteți vedea, programul nu s-a întrerupt timp de 5 secunde, ci puțin mai mult. De asemenea, dacă rulați programul pe computer, veți observa că acesta ar putea opri execuția firului de execuție pentru mai mult de 5000 milisecunde și nu este necesar timp de 5008 milisecunde. Ideea este că totul depinde de sistemul de operare și de implementarea specifică a planificatorului de fire. Mai detaliat, timpul real pe care îl așteaptă un fir înainte de a se trezi și de a începe execuția depinde de temporizatoarele și programatorii sistemului. Pentru un sistem silențios, timpul real de somn este aproape de timpul de somn specificat, dar pentru un sistem încărcat va fi puțin mai lung. Această metodă este adesea folosită în firele copil atunci când trebuie să faceți ceva tot timpul, dar nu prea des. Iată un exemplu de program care va imprima un mesaj în fiecare secundă și nu va ieși niciodată:
public class SleepDemo1 {

   public static void main(String[] args) throws InterruptedException {
       while (true)
       {
           Thread.sleep(1000);
           System.out.println("One more second");
       }
   }
}

Puncte importante ale Java Thread Sleep

Este important să ne amintim că metoda Java Thread Sleep funcționează astfel încât:
  • Se suspendă întotdeauna execuția firului curent.

  • Firul propriu-zis inactivează până se trezește, iar timpul de execuție depinde de temporizatoarele și programatoarele de sistem.

  • Firul adormit nu blochează firul curent.

  • Orice alt fir de execuție poate întrerupe firul curent de adormire, caz în care este lansată o excepție InterruptedException .

  • Valoarea argumentului pentru milisecunde nu poate fi negativă, altfel va fi aruncată o excepție IllegalArgumentException .

Pentru a da un exemplu de lansare a unei IllegalArgumentException , trebuie doar să modificați puțin programul de mai sus:
public class SleepDemo1 {

       public static void main(String[] args) throws InterruptedException {
           //the current time in milliseconds
           long start = System.currentTimeMillis();
           // stop the main thread of the program for 5000 milliseconds (5 seconds)
           Thread.sleep(-5000);
           System.out.println("The thread is paused for " + (System.currentTimeMillis() - start) + " ms");
       }
}
Iată rezultatul:
Excepție în firul „principal” java.lang.IllegalArgumentException: valoarea timeout este negativă la java.base/java.lang.Thread.sleep(Metoda nativă) la SleepDemo.main(SleepDemo.java:7)
Mai sus punem firul principal la somn. Acum să încercăm să aplicăm metoda unui alt fir.
// Java Program to sleep the custom thread
public class SleepDemo2 extends Thread{

       public void run()
       {
           // thread 0
           try {
               for (int i = 0; i < 10; i++) {

                   // sleeps the main thread for about 2 seconds
                   Thread.sleep(2000);
                   System.out.println(i);
               }
           }
           catch (Exception e) {

               // catching the exception
               System.out.println(e);
           }
       }
       public static void main(String[] args)
       {
           SleepDemo2 sleepDemo2 = new SleepDemo2();
           sleepDemo2.start();
       }
}
Ieșirea este:
0 1 2 3 4 5 6 7 8 9
Comentarii
  • Popular
  • Nou
  • Vechi
Trebuie să fii conectat pentru a lăsa un comentariu
Această pagină nu are încă niciun comentariu