ReadWriteLock es una interfaz en java. Un ReadWriteLock nos permite agregar una función de seguridad de subprocesos a una estructura de datos mientras aumenta el rendimiento al permitir que varios subprocesos lean los datos simultáneamente y un subproceso actualice los datos exclusivamente.
ReadWriteLock se describe en el paquete java.util.concurrent.locks, siendo ReentrantReadWriteLock una clase de implementación. Las implementaciones de ReadWriteLock aseguran que los efectos de sincronización de memoria de las operaciones de writeLock (como se describe en la interfaz Lock) también se mantienen con respecto al readLock asociado. Entonces, podemos crear un ReadWriteLock como este:
ReadWriteLock rwlock = new ReentrantReadWriteLock();
Un par de bloqueos asegurados están asociados con ReadWriteLocks:
- bloqueo de solo lectura y
- bloqueo de escritura
Muchos subprocesos de lectura pueden mantener el bloqueo de lectura al mismo tiempo, siempre que no haya escritores. Y el bloqueo de escritura es exclusivo.
Clase ReentrantReadWriteLock en Java
ReentrantReadWriteLocks se puede usar para mejorar la concurrencia en algunos usos de tipos de Colecciones. La clase ReentrantReadWriteLock es útil y solo se espera que las colecciones sean importantes, a las que accedan más subprocesos de lectura que de subprocesos de escritura, y requieran operaciones con una sobrecarga que supere la sobrecarga de sincronización.
La clase ReentrantReadWriteLock tiene las siguientes propiedades:
- Orden de adquisición: como lector o escritor, esta clase no impone un orden de preferencia para el acceso a la cerradura. Aunque, se admite una política de equidad opcional.
- Reentrada: al estilo de ReentrantLock, tanto los lectores como los escritores pueden volver a adquirir el bloqueo de lectura o también los bloqueos de escritura.
- Degradación de bloqueo: la reentrada también permite degradar del bloqueo de escritura a un bloqueo de lectura, logrando el bloqueo de escritura, luego el bloqueo de lectura y luego liberando el bloqueo de escritura.
- Interrupción de la adquisición de bloqueo: Durante la adquisición de bloqueo, el bloqueo de lectura y el bloqueo de escritura admiten la interrupción.
- Soporte de condición: con respecto al bloqueo de escritura, el bloqueo de escritura proporciona una implementación de condición que se comporta de la misma manera.
- Instrumentación: la clase ReentrantReadWriteLock admite métodos para determinar si los bloqueos se mantienen o se disputan.
ReentrantReadWriteLock se describe en el paquete java.util.concurrent.locks, con interfaces implementadas serializables, ReadWriteLocks. Podemos crear un ReentrantReadWriteLock como este:
ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
ReentrantReadWriteLock tiene dos bloqueos separados:
- El bloqueo de lectura ‘ r’ devuelto por el método readLock().
- El bloqueo de escritura ‘ w’ devuelto por el método writeLock().
Lock r = rwl.readLock(); Lock w = rwl.writeLock();
Diferencia entre ReadWriteLock y ReentrantReadWriteLock
S. No. | LeerEscribirBloquear | ReentranteReadWriteLock |
---|---|---|
1. | ReadWriteLock es una interfaz. | ReentrantReadWriteLock es una clase. |
2. | ReadWriteLock implementa la clase ReentrantReadWriteLock. | ReentrantReadWriteLock implementa la interfaz ReadWriteLock, que admite una semántica similar a ReentrantLock. |
3. | La interfaz ReadWriteLock define bloqueos de manera similar, que pueden compartirse entre lectores pero son exclusivos para escritores. | Aquí, se proporciona una única implementación, ReentrantReadWriteLock, ya que cubre la mayoría de los contextos de uso estándar. |
4. | Está diseñado como un mecanismo de bloqueo de alto nivel que le permite agregar funciones de seguridad de subprocesos a una estructura de datos. | Los programadores pueden desarrollar sus propias implementaciones para cubrir requisitos no estándar. |
Publicación traducida automáticamente
Artículo escrito por kumarsaurabhsingh05 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA