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:
|
Sleep() tiene dos métodos sobrecargados:
|
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():
- Ambos hacen que el subproceso actual pase al estado no ejecutable.
- 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 }
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"); } } }
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