Jumping Bytes and Hopping Bits
the church of tech
Menu

reentrantreadwritelock 예제 August 2, 2019

아래 예제 클래스에서 실행 가능한 세 가지 구현을 만들었습니다. 모두 ReentrantReadWriteLock 잠금 변수를 사용합니다. 잠금은 ReentrantReadWriteLock (부울 공정) 생성자를 사용하여 만들어지므로 공정성 정책이 제공됩니다. 이 예제에서는 읽기 및 쓰기 작업이 매우 빠르기 때문에 정수 배열에서 위치를 직접 설정하거나 읽는 이유는 무엇입니까? 실제 읽기/쓰기 잠금 사용은 읽기 작업이 어느 정도 복잡하고 완료하는 데 상당한 시간이 걸릴 수 있으므로 여러 프로세스에서 동시에 이러한 사소한 읽기 작업에 액세스할 수 있는 시나리오를 위한 것입니다. 응용 프로그램의 처리량을 높입니다. 두 스레드가 읽기 잠금과 하나의 쓰기 잠금을 사용하는 또 다른 예를 살펴보겠습니다. 클래스 ReentrantRWDemo에는 두 가지 메서드가 있으며 get()은 TreeMap에서 데이터를 얻는 데 사용되므로 읽기 잠금이 사용됩니다. 또 다른 방법 put()은 맵에 값을 추가하는 데 사용되며 쓰기 잠금을 사용합니다. ReadWriteLock 인터페이스는 읽기 및 쓰기 잠금 인스턴스를 가져오는 메서드를 제공합니다: readLock() 및 writeLock() 메서드각각. 이러한 잠금은 동일한 ReadWriteLock 인스턴스에서 가져와야 합니다. 두 잠금 모두 lock() 및 unlock() 메서드를 노출합니다. lock() 및 unlock() 호출 사이에 있는 코드는 읽기/쓰기 잠금 의미 체계의 적용을 받습니다. 이 예제에서는 여러 프로세스가 읽기 잠금을 획득하고 정수 배열에서 동시에 값을 가져올 수 있지만 쓰기 잠금을 보유하는 프로세스가 없는 경우에만 가능합니다.

예제를 실행 하면 결과 아래 와 같은 것 일 것 이다: 이 마음에 하나는 읽기 및 쓰기 작업이 매우 빠른 경우 결론수 있습니다-우리의 정수 배열 예제 처럼-대신 전용 액세스 잠금 메커니즘을 사용 하 여 더 적합 할 수 있습니다 (a 일반 ReentrantLock, 동기화 된 래퍼 또는 보호 된 코드 섹션이 연속인 경우 동기화 된 프리미티브에 의존합니다. 액세스는 어쨌든 직렬화되며 읽기 / 쓰기 잠금 오버 헤드 페널티가 없습니다.

Categories: Uncategorized