Interfaz de bloqueo, sincronizador de cola AbstractQueuedSynchronizer, bloqueo de reingreso, bloqueo de lectura-escritura

1. interfaz de bloqueo

La interfaz de bloqueo proporciona algunos métodos, como lock (), tryLock () y otros métodos, como ReentrantLock se basa en el sincronizador de cola para lograr

二 、 AbstractQueuedSynchronizer

1. ¿Qué es un sincronizador de colas?

El sincronizador de cola es una clase abstracta que proporciona una serie de métodos para lograr el estado de sincronización de las colas de subprocesos (la comprensión simple es el bloqueo), incluidos los nodos de cola (es un modelo FIFO, primero en entrar, primero en salir), los atributos del nodo de cola incluyen: encabezado ( Los nodos head, tail, prev y next proporcionan una serie de métodos para adquirir bloqueos, todos estos métodos se escriben a través del giro CAS.

2. Los métodos que el sincronizador de colas necesita reescribir y los métodos ya proporcionados

El método que debe reescribirse es el método al comienzo del intento, que se utiliza para obtener el estado de sincronización, y los métodos proporcionados ejecutarán el método que necesita reescribirse

Los métodos provistos incluyen:

Obtenga el estado de sincronización exclusivamente

Estado de sincronización de lanzamiento exclusivo

Estado de sincronización compartida

Estado de sincronización de lanzamiento compartido

Consultar estado de sincronización

3. Ceremonia de monopolio

Adquirir la cerradura:

Se agrega un nuevo subproceso al nodo de cola, y el criterio de giro CAS de este nodo se establece para determinar si el nodo frontal es el nodo principal e intenta obtener el estado de sincronización. Si el juicio es exitoso y la adquisición es exitosa, el nodo se establece como el nodo principal y se ejecuta, de lo contrario el juicio continúa Juicio de vuelta

Liberar bloqueo

4. Compartido

La diferencia entre compartido y exclusivo es si varios subprocesos pueden obtener el estado de sincronización al mismo tiempo

La adquisición de un bloqueo es similar a la liberación de un bloqueo. Utiliza el giro para determinar si el nodo frontal superior es el nodo principal para intentar obtener el estado de sincronización.

5. Tiempo de espera exclusivo para obtener el estado de sincronización

Se refiere a la adquisición del bloqueo dentro del tiempo especificado y devuelve verdadero si se adquiere; de ​​lo contrario, devuelve falso. Esto  no está  disponible en sincronizado . Además,  la sincronizada interrumpirá (  interrupte  ) hilo ha sido bloqueado, y el sincronizador de colas puede volver inmediatamente y lanzar una excepción, Guardar recursos.

 La adquisición de la sincronización de estado de tiempo de espera exclusiva  y  exclusiva  de comparación de fase, la primera mitad de la misma, pre-spin se determina si el nodo es el nodo de cabeza, sin embargo, cuando se determina en false, se determina si hay un tiempo de espera y los retornos de la lógica.

Tres, cerradura reentrante ReentrantLock

Caracteristicas

Para el mismo subproceso, el uso múltiple de bloqueos reentrantes para la   operación de bloqueo () no provocará el bloqueo del subproceso, este es el nombre del bloqueo reentrante;

Debido a que el bloqueo reentrante puede bloquear el mismo hilo varias veces, hay un recuento del número de bloqueos, y solo después de que se libera el recuento, se considera que el bloqueo reentrante se ha liberado;

Además, las cerraduras reentrantes se dividen en cerraduras justas y cerraduras injustas. Bloqueo justo, al igual que su nombre, qué subproceso adquiere el bloqueo primero y espera el tiempo más largo, luego puede obtener el bloqueo para ejecutarse. No es justo el bloqueo, es decir, no importa qué hilo espere más tiempo, quien agarra el bloqueo primero, quién lo posee, no tiene lógica para juzgar la justicia;

Bloqueo injusto

La implementación predeterminada de bloqueos reentrantes son bloqueos injustos. Los bloqueos injustos intentarán dos bloqueos de bloqueo CAS cada vez que estén bloqueados. Si ambos bloqueos de bloqueo CAS fallan, ingresarán a la cola de sincronización y esperarán.

Bloqueo justo

El bloqueo justo juzgará si el predecesor existe cada vez que intenta agarrar el bloqueo. Si existe, significa que no intentará agarrar el bloqueo después de que esté en la cola.

Resumen de cerraduras injustas y cerraduras justas

Los bloqueos justos solo garantizan las reglas FIFO primero en entrar, primero en salir de la ejecución del hilo, pero no son tan eficientes como los bloqueos injustos, porque los bloqueos injustos no ocupan recursos como los bloqueos justos y determinan si son hilos que pueden obtener bloqueos. Hay mucho menos gastos generales.

4. ReadWriteLock

Caracteristicas

Un bloqueo de lectura y escritura puede permitir que varios subprocesos adquieran el bloqueo de lectura al mismo tiempo, pero se bloqueará al adquirir el bloqueo de escritura. Después de adquirir el bloqueo de escritura, se bloquearán todas las operaciones para adquirir el bloqueo de lectura. El bloqueo de lectura y escritura también tiene las características de bloqueo justo y bloqueo injusto. El bloqueo de lectura-escritura es más adecuado, por ejemplo, para el caché, ya que puede obtener el bloqueo de lectura al mismo tiempo cuando se lee en varios subprocesos, y la operación de escritura necesita obtener el bloqueo de escritura.

Principio

El bloqueo de lectura-escritura solo juzga el estado de lectura-escritura por un valor, que es a través del método de ruptura de 32 bits. Los primeros 16 bits son el estado de bloqueo de lectura, y los últimos 16 bits son el estado de bloqueo de escritura. Al adquirir un bloqueo de lectura, se realiza una operación de bit & utilizando el estado de sincronización y el valor del estado de lectura-escritura, y se utiliza un operador de bit >>> al adquirir un bloqueo de escritura.

Leer bloqueo

Varios hilos pueden adquirir un bloqueo de lectura al mismo tiempo, y si un hilo quiere adquirir un bloqueo de escritura en este momento, se bloqueará

Escribir cerradura

 Solo un hilo puede adquirir un bloqueo de escritura, que es un bloqueo exclusivo.

Supongo que te gusta

Origin www.cnblogs.com/lcmlyj/p/12681342.html
Recomendado
Clasificación