CodeGym/Blog Java/Random-ES/Método Thread.sleep() en Java
Autor
Artem Divertitto
Senior Android Developer at United Tech

Método Thread.sleep() en Java

Publicado en el grupo Random-ES
En los programas Java, hay situaciones en las que un subproceso se ejecuta demasiado rápido o el programa necesita cambiar a otro subproceso. Para hacer esto, debe suspender la ejecución del hilo actual. En Java, esto se puede hacer usando el método java.lang.Thread.sleep() .

Método Thread.sleep()

La clase Thread está presente en el paquete Java.lang y contiene el método Thread.sleep() . El método java.lang.thread sleep() se usa para suspender el hilo actual durante un período de tiempo específico en milisegundos. Si observa los documentos de Oracle , encontrará que hay dos métodos sleep() sobrecargados de la clase Thread .
static void sleep(long millis)
donde millis es el tiempo en milisegundos. Este método hace que el subproceso que se está ejecutando actualmente se duerma (detenga temporalmente la ejecución, "durmiendo") durante milisegundos, según la precisión de los temporizadores y programadores del sistema. El valor del argumento para milisegundos no puede ser negativo. Si es así, se lanzará IllegalArgumentException .
static void sleep(long millis, int nanos)
donde mills es el tiempo en milisegundos y nanos es el tiempo en nanosegundos. Esta variante del método se utiliza para suspender la ejecución del subproceso actual durante el tiempo exacto en milisegundos y nanosegundos. El valor de nanosegundos es válido entre 0 y 999999. Vamos a crear un programa simple que use el método Thread.sleep() para pausar la ejecución del hilo principal durante 5 segundos:
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");
       }
}
¿Qué está pasando en este programa? Primero comienza, luego duerme durante 5 milisegundos (5 segundos), luego imprime en la consola un mensaje sobre cuánto tiempo estuvo congelado y luego sale. La salida es:
El hilo está en pausa durante 5008 milisegundos.
Como puede ver, el programa no se detuvo durante 5 segundos, sino un poco más. Además, si ejecuta el programa en su computadora, notará que podría detener la ejecución del hilo por más de 5000 milisegundos y no es necesario por 5008 milisegundos. El punto es que todo depende del sistema operativo y la implementación específica del programador de subprocesos. Con un poco más de detalle, el tiempo real que espera un subproceso antes de despertarse y comenzar la ejecución depende de los temporizadores y planificadores del sistema. Para un sistema silencioso, el tiempo de suspensión real es cercano al tiempo de suspensión especificado, pero para un sistema cargado será un poco más largo. Este método se usa a menudo en subprocesos secundarios cuando necesita realizar alguna acción todo el tiempo, pero no con demasiada frecuencia. Aquí hay un ejemplo de un programa que imprimirá un mensaje cada segundo y nunca saldrá:
public class SleepDemo1 {

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

Puntos importantes de Java Thread Sleep

Es importante recordar que el método Java Thread Sleep funciona de tal manera que:
  • Siempre suspende la ejecución del hilo actual.

  • El subproceso real duerme hasta que se despierta, y el tiempo de ejecución depende de los temporizadores y programadores del sistema.

  • El subproceso inactivo no bloquea el subproceso actual.

  • Cualquier otro subproceso puede interrumpir el subproceso inactivo actual, en cuyo caso se lanza una InterruptedException .

  • El valor del argumento para milisegundos no puede ser negativo, de lo contrario, se generará una IllegalArgumentException .

Para dar un ejemplo de cómo lanzar una excepción IllegalArgumentException , simplemente modifique un poco el programa anterior:
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");
       }
}
Aquí está la salida:
Excepción en el subproceso "principal" java.lang.IllegalArgumentException: el valor de tiempo de espera es negativo en java.base/java.lang.Thread.sleep(Native Method) en SleepDemo.main(SleepDemo.java:7)
Arriba ponemos el hilo principal a dormir. Ahora intentemos aplicar el método a algún otro hilo.
// 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();
       }
}
La salida es:
0 1 2 3 4 5 6 7 8 9
Comentarios
  • Populares
  • Nuevas
  • Antiguas
Debes iniciar sesión para dejar un comentario
Esta página aún no tiene comentarios