voto
la variable
para asegurar la visibilidad de la rosca, que prohíbe el reordenamiento de comandos. Pero no se garantiza la atomicidad
escenarios volitile
Lazy DCL, doble comprobación de sincronización
propiedades volitile
Prohibir el reordenamiento de instrucciones
la realización de la CPU: lfence, sfence, mfence primitiva
implementaciones de JVM SS, LL, SL, LS barrera
volitile lograr: ser leído después de terminadas las operaciones de escritura solamente
las operaciones de lectura a las operaciones de escritura sólo después de la lectura
Asegúrese de hilo visibilidad
Hardware CPU, el protocolo de coherencia de caché (MESI)
por la memoria de trabajo con prontitud se escribe en la memoria principal, asegurar la visibilidad entre los hilos.
sincronizada engrosamiento refinamiento
Refinamiento: Cuando la lógica de servicio requiere sólo una pequeña parte de los métodos de sincronización, el método no necesita para bloquear la totalidad
rugosa: Cuando la lógica de servicio en el proceso de bloqueo de una pluralidad de partes, se prefiere el método directamente bloqueo
uso sincronizado de puntos
1, sincronización está bloqueado objeto, cuando un objeto está bloqueado, cambió el objeto causará problemas. Así que cuando el objeto es añadir declaración final
2, no tienen un objeto de tipo cadena como un bloqueo, un callejón sin salida es probable que causa la obstrucción, ya que es probable que el programa y los usos de la biblioteca la misma cerradura
CAS (sin optimización de bloqueo, giro, bloqueo optimista)
Inseguro: Comparar y de intercambio
CAS (valor, el esperado, NewValue)
si E V ==
V == nuevo nuevo
de otro modo el try o fracasar de nuevo
la CPU primitiva apoyo, el funcionamiento no permitido a inserto
ABA problema: un hilo A-> B, un hilo de BA. Tipos de referencia tienen problemas (citado ha sido objeto de una modificación), no el problema subyacente tipo de datos.
Al aumentar el número de versión se determina (An AtomicStampedReference)
Bajo JUC en paquetes son atómicas aplicación CAS
Inseguro
Operación de memoria directa: AllocateMemory
instancia de clase generada directamente: allocateInstance
acción directa de clase o instancia variables: los getObject
operaciones relacionadas con el CAS: CompareAndSwap int objeto largo