CodeGym /Java blog /Tilfældig /Thread.sleep() metode i Java
John Squirrels
Niveau
San Francisco

Thread.sleep() metode i Java

Udgivet i gruppen
I Java-programmer er der situationer, hvor en tråd kører for hurtigt, eller programmet skal skifte til en anden tråd. For at gøre dette skal du suspendere udførelsen af ​​den aktuelle tråd. I Java kan dette gøres ved hjælp af java.lang.Thread.sleep() metoden.

Thread.sleep() metode

Thread - klassen er til stede i Java.lang-pakken og indeholder Thread.sleep()- metoden. Java.lang.thread sleep()- metoden bruges til at suspendere den aktuelle tråd i et bestemt tidsrum i millisekunder. Hvis du ser på Oracle docs , vil du opdage, at der er to overbelastede sleep()- metoder af Thread- klassen.

static void sleep(long millis)
hvor millis er tiden i millisekunder. Denne metode får den aktuelt eksekverende tråd til at gå i dvale (midlertidigt stoppe udførelse, "sovende") i millis af millisekunder, afhængigt af præcisionen af ​​systemtimerne og planlæggerne. Argumentværdien for millisekunder kan ikke være negativ. Hvis ja, vil IllegalArgumentException blive kastet.

static void sleep(long millis, int nanos)
hvor fræser tiden i millisekunder og nanos er tiden i nanosekunder. Denne variant af metode bruges til at suspendere udførelsen af ​​den aktuelle tråd i den nøjagtige tid i millisekunder og nanosekunder. Nanosekundværdien er gyldig mellem 0 og 999999. Lad os lave et simpelt program, der bruger Thread.sleep() -metoden til at pause udførelsen af ​​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");
       }
}
Hvad sker der i dette program? Først starter den, så sover den i 5 millisekunder (5 sekunder), udskriver derefter en besked til konsollen om, hvor længe den har været frosset, og afslutter derefter. Udgangen er:
Tråden er sat på pause i 5008 millisekunder
Som du kan se, holdt programmet ikke pause i 5 sekunder, men en lille smule længere. Også hvis du kører programmet på din computer, vil du bemærke, at det kan stoppe udførelsen af ​​tråden i mere end 5000 millisekunder og ikke nødvendigt i 5008 millisekunder. Pointen er, at det hele afhænger af operativsystemet og den specifikke implementering af trådplanlæggeren. Lidt mere detaljeret afhænger den faktiske tid, en tråd venter, før den vågner op og starter udførelse, af systemtimerne og planlæggerne. For et stille anlæg er den faktiske dvaletid tæt på den angivne dvaletid, men for et belastet anlæg vil den være lidt længere. Denne metode bruges ofte i børnetråde, når du skal gøre noget hele tiden, men ikke for ofte. Her er et eksempel på et program, der udskriver en besked hvert sekund og aldrig afslutter:

public class SleepDemo1 {

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

Vigtige punkter i Java Thread Sleep

Det er vigtigt at huske, at Java Thread Sleep- metoden fungerer på en sådan måde, at:
  • Det suspenderer altid udførelsen af ​​den aktuelle tråd.

  • Den faktiske tråd sover, indtil den vågner, og udførelsestiden afhænger af systemets timere og planlæggere.

  • Sovende tråd blokerer ikke den aktuelle tråd.

  • Enhver anden tråd kan afbryde den aktuelle sovende tråd, i hvilket tilfælde en InterruptedException kastes.

  • Argumentværdien for millisekunder kan ikke være negativ, ellers vil en IllegalArgumentException blive kastet.

For at give et eksempel på at kaste en IllegalArgumentException , skal du blot ændre ovenstående program en smule:

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 outputtet:
Undtagelse i tråden "main" java.lang.IllegalArgumentException: timeoutværdien er negativ ved java.base/java.lang.Thread.sleep(Native Method) på SleepDemo.main(SleepDemo.java:7)
Ovenfor lægger vi hovedtråden i dvale. Lad os nu prøve at anvende metoden til en anden 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();
       }
}
Udgangen er:
0 1 2 3 4 5 6 7 8 9
Kommentarer
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION