<aside>
💡 정리
- 모든 자바 객체는 고유한 모니터 락이 존재
- synchronized 키워드를 통해 모니터 락을 획득하여 상호 배제를 구현
- 한번에 하나의 스레드만 모니터 락을 유지하기에 공유 자원의 동시 접근을 방지
</aside>
synchronized 키워드:
- 메소드나 블록에 사용하여 한 번에 하나의 스레드만 접근할 수 있도록 합니다.
- 객체의 모니터 락을 이용하여 상호 배제를 구현합니다.
- 모니터 락
- Lock 인터페이스:
- java.util.concurrent.locks 패키지의 Lock 인터페이스를 구현한 클래스(예: ReentrantLock)를 사용합니다.
- synchronized보다 더 세밀한 제어가 가능합니다.
- Semaphore 클래스:
- 동시에 접근 가능한 스레드 수를 제한할 수 있습니다.
- 이진 세마포어(permits=1)를 사용하면 뮤텍스와 유사한 기능을 합니다.
- Atomic 클래스:
- java.util.concurrent.atomic 패키지의 클래스들을 사용하여 원자적 연산을 수행합니다.
- 락 없이도 스레드 안전한 연산이 가능합니다.
- volatile 키워드:
- 변수의 가시성을 보장하여 멀티 스레드 환경에서의 동기화 문제를 일부 해결합니다.