¿Por qué esperar y notificar están en bloques de código sincronizados?
Los métodos de espera y notificación deben usarse en bloques de código sincronizados por las siguientes razones:
1. Seguridad de subprocesos: en un entorno de subprocesos múltiples, si varios subprocesos acceden al compartido. Al mismo tiempo, los datos y los recursos pueden causar inconsistencias en los datos u otros problemas. El uso de bloques de código sincronizados puede garantizar que solo un subproceso pueda acceder a recursos compartidos al mismo tiempo, garantizando así la seguridad de los subprocesos.
2. Asegúrese de que el subproceso despertado sea el subproceso de destino: el método de notificación se utiliza para despertar otros subprocesos que esperan en el monitor de objetos, pero solo se pueden despertar los subprocesos en estado de espera. Si el hilo no está en estado de espera cuando se llama al método de espera, llamar al método de notificación no tendrá ningún efecto. Por lo tanto, el código relevante debe colocarse en el bloque de código sincronizado para garantizar que el hilo que llama a los métodos de espera y notificación sea el hilo en estado de espera.
3. Evite el punto muerto: en la programación multiproceso, el punto muerto es un problema común. Para evitar un punto muerto, puede seguir ciertas reglas al llamar a los métodos de espera y notificación, por ejemplo: llamar a esperar primero y luego llamar a notificar. Esto garantiza que los subprocesos adquieran bloqueos en un orden determinado, reduciendo así la probabilidad de interbloqueo. Colocar estas operaciones en bloques de código sincronizados garantiza que estas reglas se ejecuten correctamente.