JAVA

[JAVA] 모니터(Monitor)

오선지♬ 2025. 10. 1. 09:56
728x90
반응형

1️⃣ 모니터(Monitor)란?

  • 정의: 한 객체에 대한 동기화 제어 장치
  • 역할: 멀티스레드에서 한 번에 하나의 스레드만 객체를 사용하게 관리
  • 쉽게 말해 “객체에 걸린 자물쇠(lock)” 같은 존재예요.

💡 모든 객체는 Java에서 모니터를 가지고 있음 → 스레드가 synchronized로 접근할 때 이 모니터를 사용


2️⃣ 모니터 동작

  1. 스레드가 synchronized(obj) 블록에 들어가면 → obj의 모니터 락을 획득
  2. 모니터를 가진 스레드만 블록 안 코드를 실행 가능
  3. 블록 종료 시 → 락 해제, 다른 스레드가 접근 가능
  4. wait()를 호출하면 → 락을 풀고 대기 → 다른 스레드 접근 가능
  5. 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