método de sincronización Java multi-hilo -synchronized

1, métodos de objeto sincronizados y bloqueadas

  cerradura subproceso es el objeto.

  1) Un hilo de objeto sostener objetos Lock Lock, hilo B puede llamar al tipo de objeto objeto de método no sincronizada de forma asíncrona

  2) Un hilo ocupa el primer objeto objetos Lock, hilo B si el tipo de objeto del objeto sincronizado llamada a un método en este momento, usted tiene que esperar, que se sincroniza.

 

2, lectura sucia (DirtyRead)

  Ejemplo:

público  de clase DirtyReadTest {
     públicas  estáticas  void main (String [] args) {
         try { 
            PublicVar publicVar = nueva PublicVar (); 
            ThreadA hilo = nuevo ThreadA (publicVar); 
            hilo.start (); 
            Thread.sleep ( 200 ); 
            publicVar.getValue (); 
        } Catch (Exception e) { 
            e.printStackTrace (); 
        } 
    } 

    Estática  clase ThreadA extiende Tema {
         privadoPublicVar publicVar; 

        pública ThreadA (PublicVar publicVar) {
             este .publicVar = publicVar; 
        } 

        @ Override 
        pública  vacío run () {
             súper .run (); 
            publicVar.setValue ( "B", "BB" ); 
        } 
    } 

    Estática  clase PublicVar {
         públicas nombre de usuario String = "A" ;
        pública cadena de contraseña = "AA" ; 

        sincronizada  pública  vacío setValue (nombre de usuario, String contraseña) {
             tratar {
                este .username = nombre de usuario; 
                Thread.sleep ( 1000 );
                este .password = contraseña; 
                System.out.println ( "nombre de hilo método setValue =" + Thread.currentThread () getName () + "\ tusername =" + nombre de usuario + "\ tpassword =" +. Contraseña); 
            } Catch (Exception e) { 
                e.printStackTrace (); 
            } 
        } 

        // 因为getValue方法是非sincronizada方法,所以造成了脏读
        pública  vacío getValue () { 
            System.out.println ("getValue nombre hilo method =" + Thread.currentThread () getName () + "\ tusername =" + nombre de usuario + "\ tpassword =" +. contraseña); 
        } 
    } 
}

Los resultados se muestran:

 

 

3, reentrante bloqueo sincronizado

  El concepto de "bloqueo de reentrada" es:

  Pueden vivir su propio bloqueo interno de nuevo. Por ejemplo, hay un hilo adquirir un bloqueo de un objeto, entonces el bloqueo de objeto no ha sido puesto en libertad, de nuevo cuando se quiere adquirir un bloqueo de este objeto todavía puede entrar, si no bloqueo de reentrada, causaría un punto muerto.

 

  cerradura de reentrada también es compatible con los hereda de la clase padre-hijo el medio ambiente: la herencia, la subclase puede llamar al método de sincronización de la clase padre de la "cerradura de reentrada."

 

4, de liberación del bloqueo anormal, automática

  Aparece hilo anormales, se libere el bloqueo hilo actual

Supongo que te gusta

Origin www.cnblogs.com/lkc9/p/12459735.html
Recomendado
Clasificación