Diferencia entre esperar y dormir en Java

Sleep(): este método se utiliza para pausar la ejecución del hilo actual durante un tiempo específico en milisegundos. Aquí, Thread no pierde la propiedad del monitor y reanuda su ejecución.

Wait(): este método se define en la clase de objeto. Le dice al subproceso que llama (también conocido como subproceso actual) que espere hasta que otro subproceso invoque el método de notificación() o notificar a todos() para este objeto. El subproceso espera hasta que recupera la propiedad del monitor y reanuda la ejecución.

Esperar() Dormir()
El método Wait() pertenece a la clase Object. El método Sleep() pertenece a la clase Thread.
El método Wait() libera el bloqueo durante la sincronización. El método Sleep() no libera el bloqueo del objeto durante la sincronización.
Wait() debe llamarse solo desde el contexto sincronizado. No es necesario llamar a sleep() desde el contexto sincronizado.
Wait() no es un método estático.  Sleep() es un método estático. 

Wait() tiene tres métodos sobrecargados:

  • Espere()
  • esperar (tiempo de espera prolongado)
  • esperar (tiempo de espera prolongado, int nanos)

Sleep() tiene dos métodos sobrecargados:

  • dormir (milis largos) mili: milisegundos
  • sleep(long millis,int nanos) nanos: Nanosegundos
espera de vacío final público (tiempo de espera prolongado) el sueño vacío estático público (millis largos) lanza Interrupted_Execption

Ejemplo para el método de suspensión:

synchronized(monitor)
{
Thread.sleep(1000);  Here Lock Is Held By The Current Thread
//after 1000 milliseconds, current thread will wake up, or after we call that is interrupt() method
}

Ejemplo para el método de espera:

synchronized(monitor)
{
monitor.wait()  Here Lock Is Released By Current Thread 
}

Similitud entre los métodos wait() y sleep(): 

  1. Ambos hacen que el subproceso actual pase al estado no ejecutable.
  2. Ambos son métodos nativos.

El siguiente fragmento de código para llamar al método wait() y sleep() :

Java

synchronized(monitor){
    while(condition == true)
    {
        monitor.wait()  //releases monitor lock
    }
 
    Thread.sleep(100); //puts current thread on Sleep   
}

Difference-between-wait-and-sleep-in-Java

Programa:

Java

// Java program to demonstrate the difference
// between wait and sleep
 
class GfG{
   
private static Object LOCK = new Object();
 
public static void main(String[] args)
  throws InterruptedException {
  
    Thread.sleep(1000);
   
    System.out.println("Thread '" + Thread.currentThread().getName() +
      "' is woken after sleeping for 1 second");
  
    synchronized (LOCK)
    {
        LOCK.wait(1000);
       
        System.out.println("Object '" + LOCK + "' is woken after" +
          " waiting for 1 second");
    }
}
}
Producción

Thread 'main' is woken after sleeping for 1 second
Object 'java.lang.Object@1d81eb93' is woken after waiting for 1 second

Publicación traducida automáticamente

Artículo escrito por nishanthec19 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *