CodeGym /Java blogg /Slumpmässig /Thread.sleep() Metod i Java
John Squirrels
Nivå
San Francisco

Thread.sleep() Metod i Java

Publicerad i gruppen
I Java-program finns det situationer när en tråd körs för snabbt eller då programmet behöver byta till en annan tråd. För att göra detta måste du avbryta körningen av den aktuella tråden. I Java kan detta göras med java.lang.Thread.sleep() -metoden.

Thread.sleep()-metoden

Thread - klassen finns i Java.lang-paketet och innehåller metoden Thread.sleep() . Metoden Java.lang.thread sleep() används för att avbryta den aktuella tråden under en viss tid i millisekunder. Om du tittar på Oracle docs kommer du att upptäcka att det finns två överbelastade sleep()- metoder i klassen Thread .

static void sleep(long millis)
där millis är tiden i millisekunder. Den här metoden får den tråd som körs för närvarande att vila (tillfälligt stoppa exekveringen, "sova") i millisekunder, beroende på precisionen hos systemtimerna och schemaläggaren. Argumentvärdet för millisekunder kan inte vara negativt. Om så är fallet kommer IllegalArgumentException att kastas.

static void sleep(long millis, int nanos)
där mals tiden i millisekunder och nanos är tiden i nanosekunder. Denna variant av metod används för att avbryta exekveringen av den aktuella tråden för den exakta tiden i millisekunder och nanosekunder. Nanosekundvärdet är giltigt mellan 0 och 999999. Låt oss skapa ett enkelt program som använder metoden Thread.sleep() för att pausa körningen av huvudtrå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");
       }
}
Vad händer i det här programmet? Först startar den, sedan sover den i 5 millisekunder (5 sekunder), skriver sedan ut ett meddelande till konsolen om hur länge den var frusen och avslutas sedan. Utgången är:
Tråden är pausad i 5008 millisekunder
Som du kan se pausade programmet inte i 5 sekunder, utan lite längre. Om du också kör programmet på din dator kommer du att märka att det kan stoppa exekveringen av tråden under längre tid än 5000 millisekunder och inte nödvändigt i 5008 millisekunder. Poängen är att allt beror på operativsystemet och den specifika implementeringen av trådschemaläggaren. I lite mer detalj, den faktiska tiden en tråd väntar innan den vaknar och börjar köras beror på systemets timer och schemaläggare. För ett tyst system är den faktiska vilotiden nära den angivna vilotiden, men för ett laddat system blir den något längre. Denna metod används ofta i underordnade trådar när du behöver göra något hela tiden, men inte för ofta. Här är ett exempel på ett program som skriver ut ett meddelande varje sekund och aldrig avslutas:

public class SleepDemo1 {

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

Viktiga punkter i Java Thread Sleep

Det är viktigt att komma ihåg att Java Thread Sleep -metoden fungerar på ett sådant sätt att:
  • Det avbryter alltid körningen av den aktuella tråden.

  • Den faktiska tråden sover tills den vaknar, och exekveringstiden beror på systemets timer och schemaläggare.

  • Den sovande tråden blockerar inte den aktuella tråden.

  • Vilken annan tråd som helst kan avbryta den aktuella sovande tråden, i vilket fall ett InterruptedException kastas.

  • Argumentvärdet för millisekunder kan inte vara negativt, annars kommer ett IllegalArgumentException att kastas.

För att ge ett exempel på att kasta ett IllegalArgumentException , modifiera bara ovanstående program lite:

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");
       }
}
Här är utgången:
Undantag i tråden "main" java.lang.IllegalArgumentException: timeoutvärdet är negativt vid java.base/java.lang.Thread.sleep(Native Method) på SleepDemo.main(SleepDemo.java:7)
Ovan sövde vi huvudtråden. Låt oss nu försöka tillämpa metoden på någon annan 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();
       }
}
Utgången är:
0 1 2 3 4 5 6 7 8 9
Kommentarer
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION