CodeGym/Java-blogg/Tilfeldig/Thread.sleep()-metoden i Java
John Squirrels
Nivå
San Francisco

Thread.sleep()-metoden i Java

Publisert i gruppen
I Java-programmer er det situasjoner når en tråd kjører for raskt eller programmet må bytte til en annen tråd. For å gjøre dette, må du suspendere utførelsen av den gjeldende tråden. I Java kan dette gjøres ved å bruke java.lang.Thread.sleep() -metoden.

Thread.sleep()-metoden

Thread - klassen er til stede i Java.lang-pakken og inneholder Thread.sleep()- metoden. Java.lang.thread sleep()- metoden brukes til å suspendere gjeldende tråd i en spesifisert tidsperiode i millisekunder. Hvis du ser på Oracle docs , vil du finne at det er to overbelastede sleep()- metoder av Thread- klassen.
static void sleep(long millis)
der millis er tiden i millisekunder. Denne metoden fører til at tråden som kjører for øyeblikket, går i dvale (midlertidig stoppe kjøringen, "sovende") i millisekunder, avhengig av nøyaktigheten til systemtidtakerne og planleggerne. Argumentverdien for millisekunder kan ikke være negativ. I så fall vil IllegalArgumentException bli kastet.
static void sleep(long millis, int nanos)
der freser den tiden i millisekunder og nanos er tiden i nanosekunder. Denne varianten av metoden brukes til å suspendere utførelsen av gjeldende tråd for nøyaktig tid i millisekunder og nanosekunder. Nanosekundverdien er gyldig mellom 0 og 999999. La oss lage et enkelt program som bruker Thread.sleep() -metoden for å pause utførelsen av hovedtråden i 5 sekunder:
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");
       }
}
Hva skjer i dette programmet? Først starter den, så sover den i 5 millisekunder (5 sekunder), skriver deretter ut en melding til konsollen om hvor lenge den har vært frosset, og avslutter deretter. Utgangen er:
Tråden er satt på pause i 5008 millisekunder
Som du kan se, stoppet ikke programmet i 5 sekunder, men litt lenger. Også hvis du kjører programmet på datamaskinen din, vil du legge merke til at det kan stoppe kjøringen av tråden i mer enn 5000 millisekunder og ikke nødvendig i 5008 millisekunder. Poenget er at alt avhenger av operativsystemet og den spesifikke implementeringen av trådplanleggeren. Litt mer detaljert, den faktiske tiden en tråd venter før den våkner og starter utførelse avhenger av systemets tidtakere og planleggere. For et stillegående system er den faktiske søvntiden nær den angitte søvntiden, men for et belastet system vil den være litt lengre. Denne metoden brukes ofte i barnetråder når du trenger å gjøre noe hele tiden, men ikke for ofte. Her er et eksempel på et program som vil skrive ut en melding hvert sekund og aldri avslutte:
public class SleepDemo1 {

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

Viktige punkter i Java Thread Sleep

Det er viktig å huske at Java Thread Sleep- metoden fungerer på en slik måte at:
  • Det suspenderer alltid utførelsen av den gjeldende tråden.

  • Selve tråden sover til den våkner, og utførelsestiden avhenger av systemtidtakerne og planleggerne.

  • Sovende tråd blokkerer ikke gjeldende tråd.

  • En hvilken som helst annen tråd kan avbryte den gjeldende sovende tråden, i så fall blir det kastet et avbrutt unntak .

  • Argumentverdien for millisekunder kan ikke være negativ, ellers vil et IllegalArgumentException bli kastet.

For å gi et eksempel på å kaste et IllegalArgumentException , bare modifiser programmet ovenfor litt:
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");
       }
}
Her er utgangen:
Unntak i tråden "main" java.lang.IllegalArgumentException: tidsavbruddsverdien er negativ på java.base/java.lang.Thread.sleep(Native Method) på SleepDemo.main(SleepDemo.java:7)
Ovenfor legger vi hovedtråden i dvale. La oss nå prøve å bruke metoden på en annen tråd.
// 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();
       }
}
Utgangen er:
0 1 2 3 4 5 6 7 8 9
Kommentarer
  • Populær
  • Ny
  • Gammel
Du må være pålogget for å legge igjen en kommentar
Denne siden har ingen kommentarer ennå