본문 바로가기

강좌/JAVA THREAD

자바 쓰레드(Thread) - 쓰레드(Thread)의 동기화 (synchronized) 자판기 예제

자판기를 보자.

자판기안에는 음료수들이 차례차례로 들어 있다

그리고 공급자가 있고 사람들이 돈을 넣고 음료수를 빼먹는다.


공급자 - 음료수 공급자

소비자 - 돈을 넣고 음료수를 빼먹는 사람


만약 자판기에 음료수가 없으면 소비자가 돈을 넣고 음료수를 뽑을 수 있을까?

없다.

공급자가 음료수를 넣기 전까지는 소비자가 사용하면 안된다.


예제로 네개의 클래스를 만들어 보자

메인 클래스, 공급자 클래스, 자판기 클래스, 소비자 클래스를 아래와 같이 만들었다.



자판기에서는 자바 stack 을 사용하였다. 처음 넣은 음료수는 나중에 나온다고 설정해서 사용.

getDrink()는 소비자가 뽑아 먹는 것을 구현한것인데.. while조건문에 스택이 비워져있으면 안에서 스레드 wait을 걸었다. 왜냐면 음료수도 없는데 뽑아 먹을수 없으니까.


putDrink는 공급자가 음료수를 넣으면 wait 된 소비자 스레드를 깨워서 뽑아 먹을수 있게 하였다.( notify())