/ / Notificar seguido de otra notificación [duplicado]: java, multihilo, bloqueo, notificación

Notificar seguido de otra notificación [duplicar] - java, multihilo, bloqueo, notificar

¿Qué sucede si notifica un bloqueo, y¿Inmediatamente notificar ese bloqueo de nuevo? Supongamos que hay 2 o más subprocesos esperando en ese bloqueo. ¿Se garantiza que se despierten dos hilos? ¿O es posible que solo se despierte un hilo, lo que significa que la segunda notificación se vuelve obsoleta?

lock.notify();
lock.notify();

¡Gracias!

Respuestas

5 para la respuesta № 1

Supongamos que hay 2 o más subprocesos esperando en ese bloqueo. ¿Se garantiza que se despierten dos hilos?

Sí. Cada notificación toma un subproceso de la cola de espera y lo coloca en la cola bloqueada; el subproceso despertado primero debe obtener acceso al synchronized bloqueo en cuestión. Si solo hay 1 hilo esperando en la cerradura, entonces el 2do. notify() no haría nada

Es importante darse cuenta de que el hilo va a no Comience a ejecutar inmediatamente. Ya que tenía que estar en una synchronized bloque en lock para poder hacer el wait() debe tener acceso a la lock de nuevo antes de que pueda funcionar. Puede haber muchos otros subprocesos ya en la cola de bloqueo, esperando obtener acceso a lock.


0 para la respuesta № 2

Sospecho que el comportamiento sería similar a llamar a NotifyAll () (en este caso es más como un notificarTwo ())

Los hilos despertados competirán en la forma habitual.de manera con cualquier otro subproceso que pueda estar compitiendo activamente para sincronizar en este objeto; por ejemplo, los subprocesos despertados no gozan de privilegios o desventajas fiables al ser el próximo subproceso para bloquear este objeto.