이 튜토리얼의 운영 환경: windows7 시스템, java10 버전, DELL G3 컴퓨터.
1. 컨셉
재진입 읽기-쓰기 잠금은 내부적으로 ReadLock과 WriteLock을 유지하지만 AQS에는 읽기와 쓰기를 동시에 제어하는 방법이 있습니다. 여기서는 상태(int)가 사용됩니다. 비트는 읽기 상태를 나타내고, 하위 16비트는 쓰기를 나타내고, 상위 16비트는 읽기 잠금을 획득한 스레드 수를 나타내고, 하위 16비트는 쓰기 잠금의 재진입 수를 나타냅니다. .
2. 원리
CAS+AQS 대기열을 사용하여 구현되었습니다. 공정한 잠금과 불공정한 잠금을 지원하며 둘의 구현은 유사합니다.
3. 예시
공개 클래스 ReentrantDemo는 Runnable을 구현합니다. 잠금 잠금 = new ReentrantLock(); @보수 공개 무효 실행() { 세트(); } 공공 무효 세트() { 노력하다 { lock.lock(); System.out.println("메서드 설정"); 얻다(); } 잡기(예외 e) { e.printStackTrace(); } 마지막으로 { lock.unlock();//최종적으로 해제되어야 함 } } 공공 무효 get() { 노력하다 { lock.lock(); System.out.println("get 메소드"); } 잡기(예외 e) { e.printStackTrace(); } 마지막으로 { lock.unlock(); } } 공개 정적 무효 메인(String[] args) { ReentrantDemo reentrantDemo = new ReentrantDemo(); 새로운 스레드(reentrantDemo).start(); } }
위 내용은 Java ReentrantLock의 재진입 테스트입니다. 전체 기사를 읽고 나면 누구나 처음에는 ReentrantLock의 사용법을 이해할 수 있을 것이며, 수업 후에 재진입 잠금 관련 내용을 확장할 수도 있을 것입니다.