El entorno operativo de este tutorial: sistema Windows7, versión Java10, computadora DELL G3.
1. Concepto
Un bloqueo de lectura y escritura reentrante . El bloqueo de lectura y escritura mantiene internamente un ReadLock y un WriteLock . La capa inferior sigue siendo AQS, pero AQS solo tiene una cantidad de estado. ¿Cómo controlar la lectura y la escritura al mismo tiempo? de estado (int) se utiliza aquí. El bit representa el estado de lectura, los 16 bits inferiores representan la escritura, los 16 bits superiores representan el número de subprocesos que adquieren el bloqueo de lectura y los 16 bits inferiores representan el número reentrante del bloqueo de escritura. .
2. Principio
Implementado usando la cola CAS+AQS . Admite bloqueos justos y bloqueos injustos, y la implementación de ambos es similar.
3. Ejemplos
La clase pública ReentrantDemo implementa Runnable { Bloquear bloqueo = nuevo ReentrantLock(); @Anular ejecución pública vacía() { colocar(); } conjunto vacío público () { intentar { lock.lock(); System.out.println("establecer método"); conseguir(); } captura (Excepción e) { e.printStackTrace(); } finalmente { lock.unlock();//Debe ser liberado finalmente } } obtener vacío público () { intentar { lock.lock(); System.out.println("obtener método"); } captura (Excepción e) { e.printStackTrace(); } finalmente { bloquear.desbloquear(); } } público estático vacío principal (String [] argumentos) { ReentrantDemo reentrantDemo = nuevo ReentrantDemo(); nuevo hilo(reentrantDemo).start(); } }
Lo anterior es la prueba reentrante de Java ReentrantLock. Creo que después de leer el artículo completo, todos podrán comprender inicialmente el uso de ReentrantLock y también podrán ampliar el contenido relacionado con el bloqueo reentrante después de la clase.