Sincronizada muchos piensan

sincronizada

(1) asegurar código de sincronización de acceso (2) el hilo se aseguran mutuamente exclusiva modificar las variables compartidas puede ser visto de manera oportuna (3) de manera eficaz dirección de reordenamiento

package com.paddx.test.concurrent;

public class SynchronizedDemo {
    public void method() {
        synchronized (this) {
            System.out.println("Method 1 start");
        }
    }
}

MonitorEnter:

Cada objeto tiene un monitor de bloqueo (monitor). Cuando el monitor está ocupada estará en un estado bloqueado, intente adquirir la propiedad del comando subproceso de supervisión de ejecución MonitorEnter, de la siguiente manera:

1, en el monitor si el número es 0, el hilo entra en el monitor, y a continuación, introduzca el número se establece en 1, el hilo es el propietario del monitor.

2. Si otro hilo ha ocupado el monitor, el hilo entra en el estado bloqueado en el monitor hasta que el número es cero, entonces re-intento de obtener la propiedad del monitor.

MonitorExit:

MonitorExit hilo de ejecución debe ser ObjectRef propietarios monitor correspondiente.

Cuando se ejecuta la instrucción, introduzca el número de monitor menos 1, menos 1 si el número introducido es 0, entonces el monitor del hilo salidas, ya no es el propietario de este monitor. Otros hilos se bloquean este monitor puede intentar tomar posesión de este monitor. 

package com.paddx.test.concurrent;

public class SynchronizedMethod {
    public synchronized void method() {
        System.out.println("Hello World!");
    }
}

Tenga en cuenta que si sincroniza en un método, no hay dos indicaciones de arriba y reemplazarlo con una representación modificada ACC_SYNCHRONIZED de la cerradura. Será en un conjunto de constantes para aumentar este identificador para adquirir su monitor, es esencialmente la misma.

Cuando se llama al método, la instrucción de llamada método de acceso ACC_SYNCHRONIZED para comprobar si el indicador está activado, si está ajustado, hilo de ejecución primero obtendrá el monitor, llegar a realizar el cuerpo del método después de ejecutar satisfactoriamente el método después de su monitor de la liberación. Durante la ejecución del método, ningún otro hilo ya no puede obtener el mismo objeto monitor.

Spinlocks
  bloqueo de peso pesado Por lo general decimos Sychronized es un bloqueo, ya que en un estado exclusivo, no se hebras de bloqueo se bloquean en espera, y el funcionamiento y la recuperación suspender el hilo en el hilo requiere modo de núcleo completa.

bloqueo de giro de la CPU ha sido ocupado, en caso de que no consiguió el bloqueo, ha sido ejecutado - giro, por lo que la ocupación de la CPU, si no se puede obtener un bloqueo en un período muy corto de tiempo, lo que sin duda la eficiencia de la CPU.

En Java 6 con el fin de obtener y cerraduras de liberación reducir el consumo de rendimiento traído, la introducción del "bloqueo parcial" y "bloqueo de peso ligero", en Java, la cerradura comprende cuatro estados, el nivel de bajo a alto de la siguiente manera: Ninguno el estado de bloqueo, tienden a bloqueo, ligero y estado de bloqueo de la cerradura de peso pesado, estos estados van a competir con la escalada de la situación. Cerradura puede actualizar, pero no puede degradar.

proceso de sincronización Minuto (bloqueo actual objeto de instancia) método de sincronización y estático (en realidad la clase (.class) de bloqueo)

resumen:

Caso 1: el mismo objeto para acceder al objeto en los dos hilos son dos método de sincronización
resultados: generar exclusivo.
Explicación: para llevar a cabo debido a que el bloqueo de ese objeto cuando el objeto llama a un método sincronizado, otros métodos de sincronización necesita esperar al final de su ejecución y libera el bloqueo después.

Caso 2: diferentes objetos para llamar al mismo método de sincronización en dos hilos en
los resultados: no se excluyen mutuamente.
Explicación: Debido a que los dos objetos, bloqueo para ese objeto no es un método, es posible ejecutar simultáneamente, no se excluyen mutuamente. Es porque tenemos la imagen de cada hilo cuando se llama a un método de objeto es nuevo, entonces habrá dos espacios, dos llaves,

método estático modificado 2.Synchronized, de hecho, que el tipo de bloqueo de objetos, comúnmente conocido como "bloqueo de clase".
Caso 1: llamando a dos clases diferentes en el método de sincronización de dos hilo directamente
Resultados: generar exclusivo.
Explicación: Debido a que el bloqueo es en realidad una clase (.class) de bloqueo objeto estático, sólo una clase de objeto, puede entenderse como cualquier momento sólo hay un espacio, hay N habitaciones, una cerradura, así que la habitación (método síncrono) entre los que deben ser mutuamente excluyentes.
Nota: La información anterior y la declaración de un objeto con un producto único para llamar método no estático es el mismo, porque siempre es sólo un objeto. Así que la sincronización entre el método de acceso debe ser mutuamente excluyentes.

Caso 2: con un método de llamada estática clase de objeto no estático el método estático en los dos hilos
Resultados: exclusivo generado.
Explicación: Debido a que es un objeto llamado, anteriormente.

Caso 3: un objeto en dos hilos está llamando a un método estático sincronizado y un sincronizado no estáticos método
resultados: no se excluyen mutuamente.
Explicación: Debido a pesar de que es una llamada a un objeto, pero dos métodos diferentes de tipos de bloqueo, llame al método estático es en realidad llamando a la clase de objeto, es decir, los dos métodos producen el mismo objeto no está bloqueado, no se excluyen mutuamente, se ejecutará simultáneamente.

 

Publicado 24 artículos originales · ganado elogios 0 · Vistas 429

Supongo que te gusta

Origin blog.csdn.net/WillliveWillWork/article/details/102629759
Recomendado
Clasificación