Vernácula talk sincronizada, CAS principio subyacente, cerraduras cerraduras y los principios de promoción de bloqueo

               目录

               1、乐观锁和悲观锁的概念

               2、synchronized底层的原理

               3.  CAS的原理

               4.  并发包下Lock锁和synchronized对比

               5.  锁升级原理
复制代码

Hola a todos, la mayoría de Ninetowns cuatro Haoheng orejas pequeñas.

Hoy venimos a hablar con vernácula sincronizados, CAS principio subyacente, cerraduras cerraduras y los principios de promoción de bloqueo.

1, el concepto de bloqueo optimista y pesimista

Un hilo tal como una variable que se modifica durante esta modificación, es psicología pesimista de que otros hilos en este periodo, también es posible modificar esta variable, por lo que añadirlo a una cerradura variable para asegurar que durante su modificación, no lo hacen el hilo no puede ir a visitar esta variable. Este bloqueo es el bloqueo pesimista. Bloqueo pesimista peso pesado está bloqueado, los objetos, en nombre de la palabra clave sincronizada.

Un hilo como para modificar una variable, durante esta modificación, es optimista psicológica, que otros temas en este periodo, no modificar esta variable, por lo que podría ser una operación de modificación, se sumará a la variable bloquee. Este bloqueo es el bloqueo optimista. El bloqueo optimista es un bloqueo ligero, en nombre del CAS objeto.

Principio 2, sincronizado subyacente

En primer lugar tenemos que saber un concepto --monitor.

Cada objeto tiene un monitor interno, monitor que tiene un contador, a partir de cero.

Si este hilo quiere conseguir el monitor de bloqueo, determinar primero el contador del monitor no es 0, si es 0, que indica que no se adquiere el bloqueo, el hilo puede adquirir el bloqueo, y luego contador en uno, en caso contrario 0, descripción ha sido hay otro hilo ha adquirido la cerradura, el bloque debe hilo de espera.

Sincronizado con el principio subyacente es mandatos de la JVM y el monitor entre los dos.

generalmente sincronizada a la cerradura objeto, clase de bloqueo es la cerradura objeto de clase. Si utiliza la palabra clave sincronizada en la instrucción JVM compilación subyacente, habrá dos instrucciones MonitorEnter y MonitorExit. Hilo en segmentos de código sincronizados, MonitorEnter instrucción de contador monitor de ejecución se incrementa en 1, de modo que otros hilos encontraron contador monitor no es 0, se bloquea de espera;

Enhebrar una segmentos de código sincronizados, de ejecución de instrucciones MonitorExit es supervisar contador en 1, de modo que otros hilos encontraron contador monitor es 0, la cerradura puede conseguir, para supervisar el contador se incrementa, y luego la ejecución de la lógica de negocio.

Lo anterior es el principio subyacente para el objeto sincronizado, clase bloqueado.

El método de bloqueo por no controlar comandos, pero por ACC_SYNCHORNIZED la palabra clave, para determinar si el método de sincronización.

3. principio CAS

CAS, Conmpare y de intercambio, Inglés se traduce en "comparar y cambio." Es un proceso de tres pasos, el primer paso es leer el valor, el segundo valor de comparación paso, vistazo a sus propios valores, y simplemente leer un diferente, el tercer paso es modificar, si el valor de la lectura de la misma con su propia, sobre la enmienda.

clase de implementación del CAS es el AtomicInteger más clásico.

Por ejemplo, dos hilos para leer en AtomicInteger más 1, un hilo antiguo valor es 0, hilos B leen el antiguo valor es 0, A continuación, ejecutar operaciones CAS, más valor, y el valor justo encontré leyendo el mismo, toda es 0, entonces se modifica el valor de 1; hilos B ejecutan operaciones CAS, más valor, y el valor justo encontré leyendo no es lo mismo, se convierte en 1, y es equivalente a releer los valores antiguos, viejo propia memoria valor a 1, y luego continuar la operación CAS.

CAS a nivel de hardware hasta el fondo de los átomos que están garantizados al mismo tiempo sólo un hilo puede ejecutar CAS, a continuación, comparar el primer set, CAS mismo tiempo otros hilos para ejecutar en este momento se producirá un error.

CAS es un problema de bichos podría surgir la circulación del aire ABA. Si se quiere resolver el problema ABA, puede utilizar la clase AtomicStampedReference, se creó un número de versión interno de una manera similar a resolver el problema de la ABA.

4. Cierre el bloqueo y se contraen y comparativo sincronizada

Creo que la principal diferencia entre los dos es los cuatro puntos siguientes;

1. En primer lugar se sincroniza Java incorporado en palabras clave, es el nivel JVM, Lock es una clase Java, es el nivel de JDK;

2.synchronized no puede determinar si es o no adquirir el estado de bloqueo, bloqueo puede determinar si la adquisición de la cerradura;

3.synchronized liberará automáticamente el bloqueo, bloqueo de necesidad (para liberar el método de desbloqueo de la cerradura ()) en finalmente liberar manualmente la cerradura, o es probable que causa interbloqueo de subproceso;

cerradura 4.Lock adecuado para código de sincronización sincronización masa, bloqueo sincronizado para una pequeña cantidad de problemas de sincronización de código.

5. Principio de la extensión de bloqueo

Que comenzó como un estado libre de bloqueo, vamos juicio saldría si hay un bloqueo, un bloqueo, y el principio de la cerradura está sesgada apoyo de bloqueo. Sesgado cerradura de bloqueo este hilo para obtener el recurso actual, voy a dar prioridad a adquirir el bloqueo de dejarlo ir, si no entra en la cerradura, y luego actualizar a un peso ligero, un CAS bloqueo que el bloqueo optimista, el bloqueo optimista es un tiempo para comparar y proceso de intercambio, si no hay éxito, será una vuelta antes de que se convirtió en una cerradura tal peso pesado después de un giro sincronizado a un número determinado, en cuyo caso se aseguraría de que el problemas de rendimiento . Si usted piensa que está sincronizada de tal cerradura peso pesado, que el rendimiento es relativamente pobre.

                        End
复制代码

Sobre el autor: Haoheng orejas pequeñas, un programador Haoheng. Quiero que todos en el mundo de la tecnología Haoheng, con la visión de ver el mundo de la tecnología. Bienvenido a escanear el siguiente código de Fanger Wei, la atención sostenida, una gran ola de la serie original está en el camino

Supongo que te gusta

Origin juejin.im/post/5e685ba7f265da57685dd3f7
Recomendado
Clasificación