
O ambiente operacional deste tutorial: sistema windows7, versão java10, computador DELL G3.
1. Conceito
Um bloqueio de leitura-gravação reentrante O bloqueio de leitura-gravação mantém um ReadLock e um WriteLock internamente. A camada inferior ainda é AQS, mas o AQS tem apenas uma quantidade de estado. de estado (int) é usado aqui. O bit representa o status de leitura, os 16 bits inferiores representam a escrita, os 16 bits superiores representam o número de threads que adquirem o bloqueio de leitura e os 16 bits inferiores representam o número reentrante do bloqueio de gravação. .
2. Princípio
Implementado usando fila CAS+AQS . Suporta bloqueios justos e bloqueios injustos, e a implementação dos dois é semelhante
3. Exemplos
classe pública ReentrantDemo implementa Runnable {
Bloqueio de bloqueio = new ReentrantLock();
@Substituir
execução nula pública() {
definir();
}
conjunto de vazios públicos() {
tentar {
bloqueio.lock();
System.out.println("definir método");
pegar();
} catch (Exceção e) {
e.printStackTrace();
} finalmente {
lock.unlock();//Deve ser liberado finalmente }
}
público void get() {
tentar {
bloqueio.lock();
System.out.println("obter método");
} catch (Exceção e) {
e.printStackTrace();
} finalmente {
bloquear.desbloquear();
}
}
public static void main(String[] args) {
ReentrantDemo reentrantDemo = new ReentrantDemo();
new Thread(reentrantDemo).start();
}
}O texto acima é o teste reentrante do java ReentrantLock. Acredito que depois de ler o artigo inteiro, todos serão capazes de entender inicialmente o uso do ReentrantLock, e você também pode expandir o conteúdo relacionado ao bloqueio reentrante após a aula.