자판기를 보자.
자판기안에는 음료수들이 차례차례로 들어 있다
그리고 공급자가 있고 사람들이 돈을 넣고 음료수를 빼먹는다.
공급자 - 음료수 공급자
소비자 - 돈을 넣고 음료수를 빼먹는 사람
만약 자판기에 음료수가 없으면 소비자가 돈을 넣고 음료수를 뽑을 수 있을까?
없다.
공급자가 음료수를 넣기 전까지는 소비자가 사용하면 안된다.
예제로 네개의 클래스를 만들어 보자
메인 클래스, 공급자 클래스, 자판기 클래스, 소비자 클래스를 아래와 같이 만들었다.
자판기에서는 자바 stack 을 사용하였다. 처음 넣은 음료수는 나중에 나온다고 설정해서 사용.
getDrink()는 소비자가 뽑아 먹는 것을 구현한것인데.. while조건문에 스택이 비워져있으면 안에서 스레드 wait을 걸었다. 왜냐면 음료수도 없는데 뽑아 먹을수 없으니까.
putDrink는 공급자가 음료수를 넣으면 wait 된 소비자 스레드를 깨워서 뽑아 먹을수 있게 하였다.( notify())
'강좌 > JAVA THREAD' 카테고리의 다른 글
자바 쓰레드(Thread) - 쓰레드(Thread) 생성자/소비자패턴 (0) | 2013.04.11 |
---|---|
자바 쓰레드(Thread) - 쓰레드로컬(ThreadLocal) (0) | 2013.04.11 |
자바 쓰레드(Thread) - 쓰레드(Thread)의 동기화 (synchronized) 화장실 예제 (1) | 2013.04.10 |
자바 쓰레드(Thread) - 쓰레드(Thread)의 동기화 (synchronized) (0) | 2013.04.09 |
자바 쓰레드(Thread) - 쓰레드(Thread)의 데이터 교환 예제 (0) | 2013.04.09 |