첫번째 동기화 예제를 보자
냄새는 나지만 화장실 예제다.
보통 집에는 화장실이 한개 혹은 두개다.(뭐 갑부라면 가족 한명당 한개씩 있을수도 있지만)
한개라고 치자.
그러면 아침에 일어나서 한명이 들어가면 나머지 구성원은 그 한명이 나올때까지 기달려야 한다.
예제를 보자
<메인메소드가 있는 메인 클래스>
<가족에 대한 클래스 쓰레드를 상속 받는다>
<화장실 클래스>
- 가족클래스에서 호출되어서 openDoor를 호출하면 입장하고 for로 일정시간 일(?) 보는 작업을 한다.
<결과>
결과를 보자 아버지가 입장하고 끄으응을 할때쯤 엄마가 입장하고 말았다..
그리고 나서 끄으응 할때쯤 아버지가 다 했다..이렇게 되면 현재 화장실에 두명이 일보고 있는것이다.
그 뒤로 여동생이 들어오고..등등.순서가 차례차례로 가야 할것이 마구마구 사람들이 순서 없이 들어 온다.
결국 동기화 처리가 되지 않는 것이다.
동기화 처리를 위해서 플래그를 두어서 플래그를 확인하면서 들어 갈 수도 있지만 효율적이지 않다.
synchronized 키워드를 이용하면 쉽게 해결 할 수있다.
화장실 클래스의 openDoor 시그니쳐를 public synchronized void openDoor(String name)으로 바꾸고
다시 실행해 본다.
결과를 보면 차례차례 화장실을 사용하고 있다.
'강좌 > JAVA THREAD' 카테고리의 다른 글
자바 쓰레드(Thread) - 쓰레드로컬(ThreadLocal) (0) | 2013.04.11 |
---|---|
자바 쓰레드(Thread) - 쓰레드(Thread)의 동기화 (synchronized) 자판기 예제 (0) | 2013.04.10 |
자바 쓰레드(Thread) - 쓰레드(Thread)의 동기화 (synchronized) (0) | 2013.04.09 |
자바 쓰레드(Thread) - 쓰레드(Thread)의 데이터 교환 예제 (0) | 2013.04.09 |
자바 쓰레드(Thread) - 쓰레드(Thread)의 데이터 교환 (0) | 2013.04.09 |