본문 바로가기
카테고리 없음

[Kotlin] ReentrantLock

by startSW 2023. 11. 22.

ReentrantLock은 Java에서 제공하는 동기화를 위한 클래스 중 하나로, 명시적인 락(또는 잠금)을 제공하여 다중 스레드 환경에서 안전하게 공유 자원에 접근할 수 있도록 도와주는 도구입니다.

"Reentrant"는 재진입을 의미하며, 스레드가 이미 획득한 잠금을 여러 번 다시 획득할 수 있다는 것을 나타냅니다. 이는 재진입이 가능하다는 특징을 가지고 있습니다.

ReentrantLockLock 인터페이스를 구현하고 있으며, 기존의 synchronized 키워드보다 더 많은 기능을 제공합니다. 몇 가지 주요 특징은 다음과 같습니다:

  1. 재진입 가능(Reentrant): 스레드가 이미 획득한 락을 여러 번 재진입할 수 있습니다.
  2. 공정성 설정 가능: ReentrantLock은 생성자에게 공정성 여부를 설정할 수 있는 옵션을 제공합니다. 공정한 락을 사용하면 더 오래 기다린 스레드가 우선적으로 락을 획득합니다.
  3. 인터럽트 가능한 락: 락을 기다리는 동안 스레드를 인터럽트할 수 있습니다.
  4. 조건 변수(Condition):  ReentrantLock과 함께 사용되는 조건 변수를 제공하여 스레드 간의 통신을 더 세밀하게 제어할 수 있습니다.

ReentrantLock을 사용하려면 락을 획득하고 해제하는 부분을 lock()unlock() 메서드로 감싸면 됩니다. 예시 코드는 다음과 같습니다:


import java.util.concurrent.locks.ReentrantLock;

public class Example {
    private final ReentrantLock lock = new ReentrantLock();

    public void performTask() {
        lock.lock(); // 락 획득
        try {
            // 공유 자원에 대한 작업 수행
        } finally {
            lock.unlock(); // 락 해제
        }
    }
}

ReentrantLocktryLock() 메서드를 통해 락을 시도하고 성공 여부를 반환할 수도 있습니다. 이를 통해 타임아웃 등을 설정할 수 있습니다.