Serialización de Java 109 usos de claves sincronizadas y sus puntos de atención, anotaciones personalizadas

1. La palabra clave sincronizada

1. Modifiquemos el método de retiro en la última serialización

 

  // añadir la palabra clave sincronizada puede ser de hasta miembros de los métodos para lograr el propósito de la sincronización de la variables de memoria 

  pública  sincronizado  sin efecto la retirada ( Doble dinero) { 

      Doble la vez = la presente .balance - Dinero; 

      el try { 

        // aquí deliberadamente retrasó un poco, se puede ver el balance mal 

        el Thread.sleep ( 1000 ); 

      } la captura (InterruptedException E) { 

       

      } 

      la presente .setBalance (Después); 

  }

 

 

Estos dos métodos tienen un rango de control de palabras clave más grande, y más y más códigos en el futuro pueden reducir la eficiencia, que no es tan eficiente como los bloques de código que se sincronizan con precisión.

Ejemplos de clases seguras para subprocesos: StringBuffer \ Vector \ HashTable

Déjame explicarte un caso

 

empaquetar com.bjpowernode.java_learning; 


pública  clase D109_1_SynchronizedMechanism { 

  públicas  estáticas  void main (String [] args) lanza InterruptedException { 

    MyClass109 mc = nueva MyClass109 (); 

    Procesador109 p = nuevo Procesador109 (mc); 

    Hilo t1 = nuevo Hilo (p); 

    Hilo t2 = nuevo Hilo (p); 

    t1.setName ( "t1" ); 

    t2.setName ( "t2" ); 

    t1.start (); 

   

    // 延迟 (保证 t1 线程 先 启动 , 并 执行 ejecutar)

    Thread.sleep ( 1000 ); 

    t2.start (); 

  } 
} 



Clase Processer109 implementos Runnable { 

  MyClass109 mc; 

  pública Processer109 (MyClass109 mc) { 

    este .mc = mc; 

  } 

  public  void run () { 

    if (Thread.currentThread (). getName (). equals ("t1" )) { 

      mc.m1 (); 

    } 

    if (Thread.currentThread (). getName (). equals ("t2" )) { 

      mc.m2 (); 

    } 

  } 

} 

clase MyClass109 { 

  vacío público  sincronizado m1 () { 

    // sleep 

    try { 

      Thread.sleep ( 1500 ); 

      System.out.println ( "m1 ....." ); 

    } catch (Exception w) { 

     

    } 

  } 

  // el método m2 esperará a que termine el método m1 , Debido a que t1 y t2 comparten un mc, y esta palabra clave en los métodos m1 y m2, comparte un objeto mc 

  public  sincronizado  vacío m2 () { 

    System.out.println ( "m2 ......" ); 

  } 

//   // la ejecución del método m2 no necesita esperar a que m1 termine, porque el método m2 no está sincronizado 

//   public void m2 () { 

//     System.out.println ("m2 ......"); 

//   } 

}

Segundo, el uso de anotaciones del sistema.

 

Paquete com.bjpowernode.java_learning; 


Importación java.util.LinkedList; 


pública  clase D109_2_SuperClass { 

  públicas  estáticas  void main (String [] args) { 

    SuperClass109 superObj = nueva nueva SuperClass109 (); 

    superObj.MethodA (); // acceder obsoletos El método, IDE agregará un tachado 

    System.out.println (superObj.var); // Acceder al dominio obsoleto, también agregará un tachado 

    SubClass109 subObj = new SubClass109 (); 

    subObj.MethodB1 (); 

    // - ------------ 

    // La siguiente anotación se utiliza para suprimir el mensaje de advertencia de compilación de la siguiente declaración 

    @SuppressWarnings ("rawtypes" ) 

    LinkedList list = new LinkedList (); 

    // Las siguientes dos declaraciones no agregan @SuppressWarnings, aparecerá un mensaje de advertencia durante la compilación 

    list.add ( 123 ); 

    list.add ( "Beijing" ); 

    for ( int i = 0; I <2; I ++ ) { 

      System.out.println (List.get (I)); 

    } 

   

  } 
} 



clase SuperClass109 { 

  // para anotar var, var representa anticuado, aunque var anticuado, pero puede todavía Utilice 

  @Deprecated 

  int var = 125 ; 

  @Deprecated 

  public  void MethodA () { 

    System.out.println ("Método Method () en la clase padre!" ); 

  } 

  Public  void MethodB () { 

    System.out.println ( "Método MethodB en la clase padre!" ); 

  } 

 

} 

Class SubClass109 extiende SuperClass109 { 

  // @Override 

  public  void MethodB1 () { 

    System.out.println ( "método MethodB subclases sustituir la clase padre ()!" ); 

  } 

}

3. Anotaciones personalizadas

1. Las anotaciones personalizadas deben declararse utilizando @interface, que heredará automáticamente la interfaz java.lang.annotation.Annotation

2. Al definir anotaciones personalizadas, no puede heredar otras anotaciones e interfaces. @Interface solo se usa para declarar una anotación. Cada método en la anotación es en realidad un parámetro de configuración.

3. El nombre del método es el nombre del parámetro, y el tipo de retorno es el tipo del parámetro. El tipo del valor de retorno solo puede ser el tipo de datos básico, Clase, Cadena, Enum. El valor predeterminado del parámetro se puede declarar mediante la palabra clave predeterminada.

4. Formato gramatical

 

[ public | final ] @    nombre de anotación de interfaz { 

  elemento de anotación 

}

 

 

Entre ellos, la palabra clave @Interface significa declarar una anotación personalizada, "nombre de anotación" es un identificador legal, "elemento de anotación" es un método sin parámetros, el tipo de método es el tipo de elemento de anotación.

Formato de sintaxis del elemento de anotación

 

Nombre del elemento de anotación de tipo de datos () [ predeterminado    ]

 

 

Si solo hay un elemento de anotación, en el caso de que el elemento de anotación se denomine valor, no es necesario escribir el nombre del elemento de anotación cuando se usa, solo necesita dar directamente el valor de anotación. Cuando use anotaciones personalizadas, libere las anotaciones personalizadas en la línea anterior o la misma línea que requiere las anotaciones, y escriba el valor del elemento de anotación entre paréntesis después de las anotaciones personalizadas. Si usa el valor predeterminado, no puede dar el soporte de papel. Si solo hay un elemento de anotación y el valor se nombra, solo necesita dar el valor en lugar de dar el nombre del elemento de anotación.

Cuarto, el código fuente:

D109_1_SynchronizedMechanism.java

D109_2_SuperClass.java

https://github.com/ruigege66/Java/blob/master/D109_1_SynchronizedMechanism.java

https://github.com/ruigege66/Java/blob/master/D109_2_SuperClass.java

2.CSDN : https: //blog.csdn.net/weixin_44630050

3. Blog Park: https://www.cnblogs.com/ruigege0000/

4. Bienvenido a prestar atención al número público de WeChat: transformación de Fourier, número público personal, solo utilizado para el aprendizaje y la comunicación, responder "paquete de regalo" en segundo plano, obtener materiales de aprendizaje de big data

 

 

Supongo que te gusta

Origin www.cnblogs.com/ruigege0000/p/12688684.html
Recomendado
Clasificación