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.