CountDownLatch
Principio de introducción
CountDownLatch es implementado por el sincronizador de colas.
Al construir un nuevo objeto CountDownLatch, debe pasar un parámetro int entero mayor que 0. Este parámetro se usa como el estado de sincronización de estado del sincronizador de cola.
public CountDownLatch ( int count) { if (count < 0 ) throw new IllegalArgumentException ( " count <0 " ); this .sync = nueva sincronización (recuento); }
Sync ( int count) { setState (count); }
Cuando un hilo en la aplicación de la CountDownLatch . El await () después de que el método será bloque de hilado determinar si el estado es 0. El estado se reduce mediante el método .countDown () de CountDownLatch .
public void countDown () { sync.releaseShared ( 1 ); }
Escenario de uso
Por ejemplo, si se requieren varios subprocesos para calcular varias hojas, y finalmente los resultados deben resumirse, puede ejecutar await () en el hilo principal y ejecutar countDown () después del cálculo de cada hoja.
Barrera Cíclica
Principio de introducción
Existen dos métodos de construcción para la barrera de sincronización CyclicBarrier.
En el primer tipo, los parámetros solo pasan números enteros.
public CyclicBarrier ( int fiestas) { this (fiestas, nulo ); }
El segundo tipo, el parámetro también necesita pasar un hilo para lograr
public CyclicBarrier ( int Parties, Runnable barreraAction) { if (parties <= 0 ) arroja una nueva IllegalArgumentException (); esto .parties = fiestas; esto .count = fiestas; this .barrierCommand = barreraAcción; }
CyclicBarrier llamándolo . El await () , el método de bloqueo hilo actual, sus variables miembro internos reentrante cerradura.
El primero:
1. Suponga que el parámetro pasa 2, el subproceso ejecuta el método await () , el subproceso 1 primero toma el bloqueo y luego disminuye el parámetro de la parte en 1 y luego determina si es 0. Si es 0, se ejecuta la lógica detrás del subproceso.
2. Si no es 0, llame al método trip () de Condition, el método trip () liberará el bloqueo y esperará. En este momento, el subproceso 2 puede tomar el bloqueo y luego ejecutar la lógica en el paso 1. En este momento, menos 1 para las partes es 0. En este momento , se llamará al método de condición signalAll () para notificar al hilo del método trip () para continuar la ejecución
El segundo tipo:
El parámetro no solo pasó 2 sino que también pasó en otro subproceso (alias obtenido C). De hecho, la lógica general es similar a la primera, excepto que después de que se considera que la parte 1 es 0 en el paso 1, primero ejecutará la lógica del subproceso C y luego activará los otros dos subprocesos.
Escenario de uso
Semáforo
Principio de introducción
Al construir Semaphore, se requiere el parámetro de modelado, que indica cuántos hilos permite ejecutar en paralelo.
pública semáforo ( int permisos) { sincronización = nuevos NonfairSync (permisos); }
Necesita ejecutar semaphore.acquire () en el hilo para obtener la licencia, luego el estado de sincronización responderá al cambio y luego ejecutar sync.releaseShared ( 1 ) para liberar la licencia, otros hilos pueden obtener la licencia
Escenario de uso
Diversos escenarios que requieren limitar el número de subprocesos. Por ejemplo, en escenarios de agrupación de conexiones, el número de subprocesos debe ser limitado.
Intercambiador
Escenario de uso
Intercambiar datos entre hilos