Java Thread lock에 대해 알아보자
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이 걸려 있는 상태에서 다른 스레드가 대기 후에 순차적으로 접근 할지 아니면 접근을 하지 않고 실행을 종료할 지 제어가 가능하다.