Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Cuál es el principio de sincronización?

¿Cuál es el principio de sincronización?

Como programador de Java, si no comprende la programación concurrente, obviamente no podrá satisfacer la demanda del mercado, especialmente si permanecerá en una posición pasiva durante el proceso de entrevista, y es posible que la entrevista terminará ahí.

Como desarrollador de Java, aunque puede implementar programación concurrente basada en el kit de herramientas de concurrencia de Java, ¿realmente comprende los principios y mecanismos detrás de esto? También podrías ponerte a prueba. ¿Has utilizado alguna vez la palabra clave sincronizada? ¿Cuál es su principio subyacente?

Programación concurrente de Java

Sincronizado es un método de acceso sincrónico mutuamente excluyente implementado por jvm. La capa inferior se implementa en función del monitor de cada objeto. El compilador compila el código modificado por sincronizado y agrega un conjunto de instrucciones de bytes antes y después del código modificado.

Monitorenter se agrega al principio del código y monitorexit se agrega al final del código. Estas dos instrucciones de código de bytes cooperan para completar el acceso mutuamente exclusivo del código de modificación de palabras clave sincronizadas.

Cuando la máquina virtual ejecuta la instrucción monitorenter, solicitará obtener el bloqueo del monitor del objeto. Según el bloqueo del monitor, se deriva el concepto de contador de bloqueo.

bloqueo concurrente ava

Cuando se ejecuta monitorenter, si el objeto no está bloqueado o el hilo actual ya posee el bloqueo del monitor de este objeto, el contador de bloqueo es 1 y el El hilo adquiere el bloqueo de objeto.

Cuando se ejecuta monitorexit, el contador de bloqueo es -1. Cuando el contador es 0, se libera el bloqueo del objeto. Luego, otros subprocesos bloqueados pueden solicitar adquirir el bloqueo del monitor.

Entendiendo los principios anteriores, pensemos en una pregunta: ¿Qué puede modificar la sincronización? ¿Cuál es la diferencia entre modificar métodos estáticos y métodos no estáticos? Todos son bienvenidos a dejar un mensaje para discusión~