티스토리 뷰

Back-end/JAVA

Lock - ReentrantReadWriteLock

지나짱-* 2023. 1. 30. 21:11

ReentrantReadWriteLock은 Java에서 제공하는 Lock 인터페이스의 구현체 중 하나이다.

 

ReentrantReadWriteLock은 동시에 여러 스레드에서 읽기 접근이 가능하지만, 하나의 스레드만이 쓰기 접근이 가능한 락 구현이다.

이를 위해 ReadLock과 WriteLock 두 개의 Lock 인터페이스를 제공한다.

 

ReadLock은 여러 스레드에서 동시에 읽기 접근이 가능하며, WriteLock은 하나의 스레드만이 쓰기 접근이 가능하다.

 

ReentrantReadWriteLock은 읽기 접근이 많은 경우 더 효율적인 락 구현을 제공할 수 있으며, 복잡한 락 구현을 요구하는 대신 적은 오버헤드를 갖는 것이 단점이 있다.

 

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.ReentrantReadWriteLock;

public class ReadWriteMap<K, V> {
  private final Map<K, V> map = new HashMap<>();
  private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
  private final Lock readLock = lock.readLock();
  private final Lock writeLock = lock.writeLock();

  public V get(K key) {
    readLock.lock();
    try {
      return map.get(key);
    } finally {
      readLock.unlock();
    }
  }

  public void put(K key, V value) {
    writeLock.lock();
    try {
      map.put(key, value);
    } finally {
      writeLock.unlock();
    }
  }
}

HashMap ReentrantReadWriteLock 적용한 간단한 예제이다.

get 메서드와 put 메서드에서 각각 readLock writeLock 사용하여 읽기 접근과 쓰기 접근을 제어하는 것을   있다.

'Back-end > JAVA' 카테고리의 다른 글

etcd  (0) 2023.01.31
Lock - StampedLock  (0) 2023.01.30
Lock - ReentrantLock  (0) 2023.01.30
Lock  (0) 2023.01.30
Exception의 종류와 발생원인  (0) 2022.12.12
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함