Search

모니터 (동기화 메커니즘)

단일 서버 환경에서 동기화, 동시성을 제어하는 방법으로는 Mutex, Semaphore가 있다.
또 자바에서 지원하는 ConcurrentHashMap이나 synchronized 를 사용할 수도 있다.
모니터는 멀티스레드 환경에서 자원의 동시 접근을 관리하는 매커니즘, 즉 동기화를 제어하는 도구이다.
자바의 모니터는 멀티스레드 프로그래밍에서 동기화를 관리하는 중요한 개념이며 Mutex와 Semaphore보다 고수준의 동기화 기법이다.

자바에서의 모니터

모든 자바 객체는 모니터를 가진다.
여러 스레드가 객체의 임계 영역을 진입하려고 할 때 JVM은 모니터를 사용해 스레드 간 동기화를 제공한다.
다른 스레드가 이 객체에 접근하려고 하면 현재 객체에 접근해있는 스레드가 작업을 끝날 때까지 기다려야 한다.
상호 배제와 스레드 간 통신을 담당한다.
상호 배제 : 특정 스레드만 접근시키고 그 외 스레드의 접근을 막는 것
스레드 간 통신 : wait(), notify(), notifyAll() 메서드를 통해 스레드 사이의 정보를 주고 받는다.

모니터와 Synchronized의 차이점

모니터
synchronized
멀티스레드 환경에서 자원의 동시 접근을 제어하는 개념적 도구
자바에서 모니터를 사용하는 구체적인 수단
자바 객체에 존재하며 상호배제와 스레드 간 통신을 담당
특정 코드 또는 특정 블럭에 대해 모니터 락을 획득하고 동시 접근을 제어
결국 모니터가 Synchronized보다 큰 개념이고 Synchronized는 모니터를 사용하는 도구이다.
모니터는 개념적인 것이고 Synchronized는 이를 구현하는 수단이다.