El concepto básico de sincronización en Java Monitor: la forma más simple y cruda de entender

Existe un curso llamado Sistema Operativo en la universidad. Los estudiantes que lo hayan estudiado deben recordar que el monitor es un concepto básico importante para la sincronización del sistema operativo. También se utiliza en la sincronización de subprocesos de JAVA. Este artículo utiliza una analogía para explicar el monitoreo. "Monitor".

1. ¿Qué es un monitor?

El monitor se puede considerar como un edificio especialmente diseñado Este edificio tiene una sala especial que generalmente contiene algunos datos y códigos, pero solo un consumidor (hilo) puede usar esta sala a la vez.

Inserte la descripción de la imagen aquí Cuando un consumidor (hilo) usa esta sala, primero debe ir a un vestíbulo (Conjunto de entrada) para esperar. El programador seleccionará un consumidor (hilo) del vestíbulo según ciertos criterios (por ejemplo, FIFO) y entrará en la sala especial. Si este hilo se "suspende" por alguna razón, el programador lo programará en la "sala de espera" y se reasignará a una sala especial después de un período de tiempo. Según la línea anterior, este edificio contiene tres salas , Respectivamente, son "sala especial", "pasillo" y "sala de espera".

Inserte la descripción de la imagen aquí En pocas palabras, el monitor se utiliza para monitorear los subprocesos que ingresan a esta sala especial y garantiza que solo un subproceso pueda acceder a los datos y el código en la sala especial a la vez.

2. Realización de monitor en JAVA

En la máquina virtual JAVA, cada objeto (Objeto y clase) está asociado con el monitor a través de una lógica determinada. Para realizar la función de exclusión mutua del monitor, cada objeto (Objeto y clase) está asociado con un candado (a veces llamado "mutuo Exclusión "), este bloqueo se denomina" semáforo "en los libros del sistema operativo, la exclusión mutua (" mutex ") es un semáforo binario.

Si un hilo tiene un bloqueo para algunos datos, otros hilos no pueden adquirir el bloqueo hasta que el hilo lo libere. En multiproceso, si escribimos este semáforo por nosotros mismos en cualquier momento, obviamente no es muy conveniente.Afortunadamente, JVM lo implementa automáticamente para nosotros.

Para evitar que varios subprocesos accedan a los datos, Java proporciona dos implementaciones: bloque de sincronización y método de sincronización. Una vez que se incrusta un fragmento de código en una palabra clave sincronizada, significa que se coloca en el área de monitoreo y la JVM proporcionará automáticamente este segmento en segundo plano. El código implementa la función de bloqueo.

3. ¿Qué parte del código de sincronización JAVA es el monitor?

Sabemos que cada objeto (Objeto / clase) de JAVA está asociado a un monitor. Es mejor decir que cada objeto (Objeto / clase) tiene un monitor. El objeto puede tener su propia sección crítica y puede monitorizar hilos. Secuencia Para hacer que los subprocesos cooperen, JAVA proporciona wait () y notificar a todos y notificar () para suspender el subproceso y activar otro subproceso en espera. Además, hay tres versiones diferentes de estos métodos:

wait(long timeout, int nanos)
wait(long timeout) notified by other threads or notified by timeout.
notify(all)

Estos métodos solo se pueden llamar en un bloque sincronizado o en un método sincronizado. La razón es que si un método no necesita ser mutuamente excluyente, no requiere monitoreo o colaboración entre subprocesos, y cada subproceso puede acceder libremente a este método, no hay necesidad de colaboración.

Al final

Los estudiantes que quieran aprender java pueden responder a la información mediante un mensaje privado para recibir un resumen de las preguntas de la entrevista de Java de los fabricantes de primera línea + manual de Alibaba Taishan + guía de aprendizaje y pensamiento para cada punto de conocimiento + un resumen de los puntos de conocimiento básicos de Java en un documento pdf de 300 páginas.

El contenido de estos materiales son todos los puntos de conocimiento que el entrevistador debe preguntar durante la entrevista. El capítulo incluye muchos puntos de conocimiento, incluidos conocimientos básicos, colecciones de Java, JVM, concurrencia multiproceso, principios de primavera, microservicios, Netty y RPC, Kafka , Diario, patrón de diseño, algoritmo Java, base de datos, Zookeeper, caché distribuida, estructura de datos, etc.

expediente

Supongo que te gusta

Origin blog.csdn.net/weixin_46577306/article/details/108041674
Recomendado
Clasificación