Bloqueo de reentrada

Condición : la aplicación de condiciones en los bloqueos le permite lograr el control sobre la gestión del acceso a las secuencias. La condición de bloqueo es un objeto de la interfaz Condition deljava.util.concurrent.locks. El uso de objetos Condition es similar en muchos aspectos al uso de loswait/notify/notifyAll de la clase, que se analizaron en uno de los temas anteriores.

Lock es una interfaz delmarco de bloqueoque proporciona un enfoque flexible para restringir el acceso a recursos/bloques en comparación con sincronizado. Al usar varios bloqueos, el orden de su liberación puede ser arbitrario, además también se puede configurar. También existe la posibilidad de manejar la situación cuando el candado ya está capturado.

ReentrantLock es una de las implementaciones de la interfaz Lock , la clase. Permite que el mismo subproceso llame al método de bloqueo, incluso si lo ha llamado antes, sin liberar el bloqueo.

La clase ReentrantLock , además de los métodos de la interfaz Lock , tiene un método de fábrica newCondition() . Este método devuelve un objeto.Condición, que le permite agregar el hilo actual al conjunto de espera del objeto dadoCondición.

private final Lock R_LOCK = ReentrantLock();
R_LOCK.lock();
try {
   //some action happens here
} finally {
   R_LOCK.unlock();
}

ReadWriteLock es una interfaz para crear bloqueos de lectura/escritura. Los bloqueos son extremadamente útiles cuando un sistema tiene muchas lecturas y pocas escrituras.

ReentrantReadWriteLock : utilizado en cachés y servicios de subprocesos múltiples, tiene un buen aumento de rendimiento en comparación con los bloques sincronizados. De hecho, la clase funciona en 2 modos mutuamente excluyentes: muchos lectores leen datos en paralelo y cuando solo 1 escritor escribe datos.

ReentrantReadWriteLock.ReadLock: bloqueo de lectura para lectores, obtenido a través de readWriteLock.readLock().

ReentrantReadWriteLock.WriteLock: bloqueo de escritura para escritores, obtenido a través de readWriteLock.writeLock().

Sincronizador

AbstractOwnableSynchronizer es la clase base responsable de construir mecanismos de sincronización. Contiene un getter/setter para recordar y leer un flujo exclusivo que puede operar en sus datos.

AbstractQueuedSynchronizer es la clase base para el mecanismo de sincronización en FutureTask, CountDownLatch, Semaphore, ReentrantLock, ReentrantReadWriteLock. También se usa cuando se crean nuevos mecanismos de sincronización que se basan en un valor int único y atómico.

AbstractQueuedLongSynchronizer es una variante de AbstractQueuedSynchronizer que admite el valor largo atómico.