[java] 읽기-쓰기 잠금을 구현하는 방법은?
읽기-쓰기 잠금은 여러 스레드가 동시에 데이터에 접근할 때 문제가 발생하지 않도록 보호하는데 사용됩니다. 읽기 연산은 여러 스레드에서 동시에 수행될 수 있지만, 쓰기 연산은 동시에 여러 스레드에서 수행되지 않아야 합니다.
자바에서 읽기-쓰기 잠금을 구현하기 위해 ReentrantReadWriteLock
클래스를 사용할 수 있습니다. 이 클래스는 읽기 잠금과 쓰기 잠금을 지원하는 기능을 제공합니다. 다음은 ReentrantReadWriteLock
을 사용하여 잠금을 구현하는 예제 코드입니다.
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class ReadWriteLockExample {
private ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
private int data;
public int readData() {
lock.readLock().lock();
try {
return data;
} finally {
lock.readLock().unlock();
}
}
public void writeData(int newData) {
lock.writeLock().lock();
try {
data = newData;
} finally {
lock.writeLock().unlock();
}
}
}
위의 예제 코드에서는 ReentrantReadWriteLock
을 사용하여 데이터에 대한 읽기와 쓰기 작업을 보호하고 있습니다. readData()
메서드는 읽기 잠금을 얻고 데이터를 반환하며, writeData()
메서드는 쓰기 잠금을 얻고 데이터를 업데이트합니다.
ReentrantReadWriteLock
은 특히 읽기 연산이 자주 발생하고 쓰기 연산이 상대적으로 적게 발생하는 상황에서 효과적입니다. 여러 스레드에서 동시에 읽기 작업을 수행할 수 있고, 쓰기 작업이 필요한 경우에는 동시에 하나의 스레드만이 쓰기 작업을 수행할 수 있습니다.
읽기-쓰기 잠금은 데이터의 일관성과 성능을 보장하기 위해 사용될 수 있으며, 자바에서는 ReentrantReadWriteLock
을 사용하여 간단하게 구현할 수 있습니다.
참고 문서: