728x90
반응형
1️⃣ 모니터(Monitor)란?
- 정의: 한 객체에 대한 동기화 제어 장치
- 역할: 멀티스레드에서 한 번에 하나의 스레드만 객체를 사용하게 관리
- 쉽게 말해 “객체에 걸린 자물쇠(lock)” 같은 존재예요.
💡 모든 객체는 Java에서 모니터를 가지고 있음 → 스레드가 synchronized로 접근할 때 이 모니터를 사용
2️⃣ 모니터 동작
- 스레드가 synchronized(obj) 블록에 들어가면 → obj의 모니터 락을 획득
- 모니터를 가진 스레드만 블록 안 코드를 실행 가능
- 블록 종료 시 → 락 해제, 다른 스레드가 접근 가능
- wait()를 호출하면 → 락을 풀고 대기 → 다른 스레드 접근 가능
- notify()를 호출하면 → 대기 중인 스레드 중 하나를 깨움, 락이 해제될 때까지 기다림
3️⃣ 그림으로 이해
[Object obj]
┌──────────────┐
│ Monitor │ ← 락과 대기 스레드 관리
└──────────────┘
Thread A Thread B
-------- --------
synchronized(obj) synchronized(obj)
obj.lock 획득 (대기) obj의 락 사용 불가
obj.wait() → 락 해제 (락 해제 후 실행 가능)
obj.notify() → Thread B 깨어남
- 모니터 = 객체별 락 + 대기 큐 관리
- wait() → 모니터 락 해제, 대기 큐로 이동
- notify() → 대기 큐에 있는 스레드를 실행 준비 상태로 이동
4️⃣ 핵심 포인트
- 모든 객체는 모니터를 가지고 있음
- synchronized = 모니터 락 획득
- wait() / notify() = 모니터에서 스레드 대기/깨움 관리
- 모니터 덕분에 공유 자원 안전하게 사용 가능
728x90
반응형
'JAVA' 카테고리의 다른 글
[JAVA] 스레드와 wait()와 notify() 상호작용 (0) | 2025.10.02 |
---|---|
[JAVA] synchronized 블록 (0) | 2025.09.29 |
[JAVA] Object.wait() (0) | 2025.09.25 |
[JAVA] Thread.sleep() (0) | 2025.09.24 |
[JAVA] String 배열 초기화 (0) | 2025.07.21 |