재진입 잠금
![](https://cdn.codegym.cc/images/article/ee2cd199-b06a-4310-93c0-67f113b8ba93/1024.jpeg)
조건 - 잠금에 조건을 적용하면 스트림에 대한 액세스 관리를 제어할 수 있습니다. 잠금 조건은 java.util.concurrent.locks의 Condition 인터페이스 객체입니다. Condition 객체를이전 주제 중 하나에서 논의된 Object 클래스wait/notify/notifyAll사용하는 것과 여러 면에서 유사합니다
잠금은 동기화와 비교하여 리소스/블록에 대한 액세스를 제한하는 유연한 접근 방식을 제공하는잠금 프레임워크의 인터페이스입니다여러 잠금을 사용하는 경우 잠금 해제 순서는 임의적일 수 있으며 구성할 수도 있습니다. 잠금이 이미 캡처된 상황을 처리할 가능성도 있습니다.
ReentrantLock은 ReentrantLock 클래스인 Lock 인터페이스 의 구현 중 하나입니다. 동일한 스레드가 잠금을 해제하지 않고 이전에 호출한 경우에도 잠금 메서드를 호출할 수 있습니다.
ReentrantLock 클래스에는 Lock 인터페이스 의 메서드 외에도 팩토리 메서드 newCondition() 이 있습니다 . 이 메서드는 객체를 반환합니다.상태, 주어진 객체의 대기 세트에 현재 스레드를 추가할 수 있습니다.상태.
private final Lock R_LOCK = ReentrantLock();
R_LOCK.lock();
try {
//some action happens here
} finally {
R_LOCK.unlock();
}
ReadWriteLock 은 읽기/쓰기 잠금을 생성하기 위한 인터페이스입니다. 잠금은 시스템에 읽기가 많고 쓰기가 거의 없을 때 매우 유용합니다.
ReentrantReadWriteLock - 다중 스레드 서비스 및 캐시에 사용되며 동기화된 블록에 비해 성능이 크게 향상됩니다. 실제로 이 클래스는 2개의 상호 배타적인 모드로 작동합니다. 많은 판독기가 병렬로 데이터를 읽고 1명의 작성자만 데이터를 쓸 때입니다.
ReentrantReadWriteLock.ReadLock - readWriteLock.readLock()을 통해 얻은 판독기에 대한 읽기 잠금입니다.
ReentrantReadWriteLock.WriteLock - readWriteLock.writeLock()을 통해 얻은 작성자에 대한 쓰기 잠금입니다.
동기 장치
![](https://cdn.codegym.cc/images/article/cb9ae844-7dce-459b-b8af-55a1830c5fb1/512.jpeg)
AbstractOwnableSynchronizer는 동기화 메커니즘 구축을 담당하는 기본 클래스입니다. 데이터에서 작동할 수 있는 전용 스트림을 기억하고 읽기 위한 getter/setter를 포함합니다.
AbstractQueuedSynchronizer는 FutureTask, CountDownLatch, Semaphore, ReentrantLock, ReentrantReadWriteLock의 동기화 메커니즘에 대한 기본 클래스입니다. 단일 및 원자 int 값에 의존하는 새로운 동기화 메커니즘을 생성할 때도 사용됩니다.
AbstractQueuedLongSynchronizer는 Atomic Long 값을 지원하는 AbstractQueuedSynchronizer 의 변형입니다