Por favor, ayude a explicar el significado de la clase de notificación en Java, ¡muchas gracias!
1. El significado del método notify():
(1) El método notify() activa aleatoriamente un hilo y mueve el hilo en espera en la cola de espera desde la espera. cola a la cola de sincronización.
(2) Después de ejecutar el método notify(), el subproceso actual no liberará el bloqueo del objeto inmediatamente y el subproceso en estado de espera no puede adquirir el bloqueo del objeto inmediatamente.
El hilo actual no liberará el bloqueo hasta que el hilo que ejecuta el método de notificación complete la ejecución del programa (es decir, salga del bloque sincronizado). Los subprocesos en la cola de sincronización pueden adquirir bloqueos de objetos.
2. Tres situaciones de liberación de objetos:
(1) El bloqueo del objeto se liberará al ejecutar el bloque de código de sincronización
(2) Al ejecutar; el bloque de código Durante el proceso, si se encuentra una excepción y el hilo finaliza, el bloqueo del objeto también se liberará;
(3) Durante la ejecución del bloque de código de sincronización, cuando se espera () Se ejecuta el método del objeto al que pertenece el bloqueo, el hilo liberará el bloqueo del objeto y el hilo también liberará el bloqueo del objeto. El subproceso liberará el bloqueo del objeto y el objeto del subproceso ingresará al grupo de espera de subprocesos, esperando ser despertado.
Información ampliada
La diferencia entre notificar y notificar a todos en Java:
Java proporciona dos métodos, notificar y notificar a todos, para activarse en condiciones específicas. Hilos en espera. puede utilizar cualquiera de estos métodos, pero existe una sutil diferencia entre notificar y notificar a todos en Java. Esta es también una de las preguntas de entrevista multiproceso más populares en Java.
Cuando llamas a notificar, solo se activará un subproceso en espera y no hay garantía de qué subproceso se activará; depende del programador de subprocesos.
Aunque si llama al método notifyAll, todos los subprocesos que esperan el bloqueo se despertarán, pero todos los subprocesos despiertos competirán por el bloqueo antes de ejecutar el resto del código, es por eso que se llama a esperar. la razón del bucle.
Debido a que si se despierta más de un subproceso, entonces el subproceso que adquirirá el bloqueo será el primer subproceso en ejecutar el bloqueo, lo que puede restablecer la condición de espera, lo que obligará a los subprocesos posteriores a esperar.
Entonces, la principal diferencia entre notify y notifyAll es que notify() solo activa un hilo, mientras que el método notifyAll activará todos los hilos.