Java Thread lock - ReentrantLock


자바에서 멀티 스레드로 프로그래밍을 하는 경우 여러 개의 스레드가 하나의 메소드에 접근 시에 Synchronized 설정으로 동기화 처리를 하여 여러 스레드가 하나 씩 메소드에 접근 가능하게 할 수 있다.

하지만 Synchronized로 설정을 하게 되면 동기화 처리는 가능하나 각 스레드가 순차적으로 락을 획득하는 것을 보장하지 않으며 동기화 설정을 커스텀 하기가 어렵다.

그런 경우 java.util.concurrent.locks.ReentrantLock을 사용하여 동기화 처리를 설정 할 수 있다. 이번에는 ReentrantLock의 기초적인 사용법을 정리해보겠다.

private final ReentrantLock lock = new ReentrantLock();

if(!lock.tryLock()) {
    // 만약 lock이 걸려있는 상태라면 아래의 로직 실행
    return;
}

try {
    // business logic 작성
} finally {
    lock.unlock();
}

위의 코드와 같이 lock을 걸어 동기 처리를 할 수 있다.

또한 lock이 걸려 있는 상태에서 다른 스레드가 대기 후에 순차적으로 접근 할지 아니면 접근을 하지 않고 실행을 종료할 지 제어가 가능하다.

카테고리:

업데이트: