Bloqueo de lectura y escritura de ReenTrantLock

Bloqueo de lectura y escritura de ReenTrantLock

En los últimos artículos, presentamos los bloqueos relacionados con la sincronización Sincronizar bloqueos y bloqueos JUC de JDK y bloqueos ReentrantLock. Ahora voy a presentar el bloqueo de lectura y escritura de JDK (el código de prueba se tomó prestado del blog de otra persona, solo haré un resumen aquí).

Primero introduzca este bloqueo de lectura y escritura ReentrantReadWriteLock

Este bloqueo de lectura y escritura también se encuentra en el paquete java.util.concurrent.locks de la herramienta JDK. A diferencia de ReentrantLock, ReentrantLock hereda Lock y ReentrantReadWriteLock hereda ReadWriteLock.

Todo el mundo sabe que el bloqueo de sincronización de subprocesos múltiples afectará en gran medida la eficiencia, por lo que se proporciona una clase ReentrantReadWriteLock de bloqueo de lectura y escritura en el JDK, que puede acelerar la eficiencia operativa. Escriba el bloqueo ReentrantReadLock para mejorar la velocidad de ejecución del código de este método.
Los bloqueos de lectura y escritura se dividen en bloqueos de lectura y bloqueos de escritura:

private ReentrantReadWriteLock lock =  new ReentrantReadWriteLock()
 lock.readLock().lock(); // 读锁
 lock.writeLock().lock();// 写锁

¿Cómo entenderlo?

Bloqueo de lectura: generalmente se usa en programas comerciales que no operan en recursos compartidos, solo leen recursos, no escriben operaciones. De esta manera, no habrá problemas de inseguridad en los subprocesos para los recursos compartidos. Por lo tanto, para que varios subprocesos lean recursos de manera eficiente, los bloqueos de lectura permitirán que varios subprocesos adquieran bloqueos para acceder a la información de recursos.

Bloqueo de escritura: generalmente se usa en programas comerciales que tienen operaciones de recursos compartidos. Debido a que las operaciones de escritura pueden causar inseguridad en los subprocesos, no se debe permitir que varios subprocesos obtengan bloqueos al mismo tiempo y se requiere un mecanismo de bloqueo exclusivo. Por lo tanto, el bloqueo de lectura es un bloqueo exclusivo y el bloqueo puede ser obtenido por otros subprocesos solo después de que finalice el subproceso anterior.

Se puede ver a partir de esto que
si hay una operación de bloqueo múltiple en la memoria del hilo:

1. 读--读锁 : 因为读锁允许同时拿锁,所以这里为线程不会互斥,都能快了的读取资源。
2. 读-写 | 写-读 锁:由于你存在了写操作,所有当线程拿到锁时,必须等线程释放锁才能由其他线程取锁。此处为互斥。
3. 写写锁 : 这里很容易理解为互斥。

Prueba de código: https://blog.csdn.net/ligh_sqh/article/details/95178457 (reenvío)

Supongo que te gusta

Origin blog.csdn.net/qq_31142237/article/details/115143090
Recomendado
Clasificación