Alternativa de notificación de espera en Java

El método wait() está definido en la clase Object, que es la clase más importante de Java. Este método le dice al hilo que lo llama (hilo actual) que abandone el bloqueo y se ponga a dormir hasta que algún otro hilo entre en el mismo monitor y llame a notify() o notifyAll(). Es un método final, por lo que no podemos anularlo.

1. El método wait() se utiliza para la comunicación entre hilos. En la comunicación entre hilos, los hilos sincronizados pueden comunicarse entre sí. Como sabes en un bloque o método sincronizado, sólo un hilo puede entrar (adquirir el bloqueo). Mediante el uso del método wait() un hilo se pausa (libera el bloqueo) que se ejecuta en su sección crítica y otro hilo puede entrar (adquirir el bloqueo) en la misma sección crítica. Para que múltiples hilos puedan comunicarse entre sí mediante el uso de wait() y notify().  Puedes decirle a un hilo que deje de trabajar (Mediante el método wait()) desde otro hilo basado en alguna condición, más tarde puedes notificarle para que empiece a procesar de nuevo (Mediante el método notify() o notifyAll()).

Digamos que un usuario quiere imprimir algunas páginas en la impresora. Entonces, estamos creando dos hilos, un hilo para imprimir las páginas y otro hilo para añadir las páginas en la impresora. Si el número de páginas en la impresora es menor que el número de entradas introducidas, entonces llamaremos al método wait() para el hilo, mientras tanto, otro hilo añadirá más páginas en la impresora y notificará al hilo actual mediante el método notify().

leer  Ejemplos de paginas web en java

Método Java join()

El método java.lang.Object.wait() hace que el hilo actual espere hasta que otro hilo invoque el método notify() o el método notifyAll() para este objeto. En otras palabras, este método se comporta exactamente como si simplemente realizara la llamada wait(0).

El hilo actual debe poseer el monitor de este objeto. El hilo libera la propiedad de este monitor y espera hasta que otro hilo notifique a los hilos que esperan en el monitor de este objeto para despertar, ya sea a través de una llamada al método notify o al método notifyAll. El hilo espera entonces hasta que pueda recuperar la propiedad del monitor y reanuda la ejecución.

Java espera hasta la condición

El método java.lang.Object.wait() hace que el hilo actual espere hasta que otro hilo invoque el método notify() o el método notifyAll() para este objeto. En otras palabras, este método se comporta exactamente como si simplemente realizara la llamada wait(0).

El hilo actual debe poseer el monitor de este objeto. El hilo libera la propiedad de este monitor y espera hasta que otro hilo notifique a los hilos que esperan en el monitor de este objeto para despertar, ya sea a través de una llamada al método notify o al método notifyAll. El hilo espera entonces hasta que pueda recuperar la propiedad del monitor y reanuda la ejecución.

Espera en Java

La diferencia entre wait y sleep o la diferencia entre sleep y yield en Java es una de las preguntas más populares de las entrevistas de Java y que se hacen en las entrevistas de multihilo. De los tres métodos que se pueden utilizar para poner en pausa un hilo en Java, los métodos sleep() y yield() se definen en la clase thread mientras que wait() se define en la clase Object, que es otra de las preguntas de la entrevista. La diferencia clave entre wait() y sleep() es que el primero se utiliza para la comunicación entre hilos, mientras que el segundo se utiliza para introducir una pausa en el hilo actual durante un corto periodo de tiempo.

leer  Superclase java ejemplo

Esta diferencia es más obvia por el hecho de que, cuando un hilo llama al método wait(), libera el monitor o bloqueo que estaba manteniendo sobre ese objeto, pero cuando un hilo llama al método sleep(), nunca libera el monitor aunque lo esté manteniendo.

Volviendo a yield(), es poco diferente a wait() y sleep(), simplemente libera la CPU retenida por Thread para dar a otro hilo la oportunidad de ejecutarse aunque no se garantiza quién obtendrá la CPU.

Por avivcas