Dead-lock example
class Store {
public int bread; // 생산자, 소비자가 공유할 데이터
public static void main(String[] args) {
Store store = new Store();
new Producer(store).start();
new Consumer(store).start();
}
}
class Producer extends Thread {
Store store;
Producer(Store store){
this.store = store;
}
public void run() {
while(true) {
synchronized(store) {
if(store.bread<20) {
store.bread++;
System.out.println("생산==>"+store.bread);
try{
Thread.sleep(400);
}catch(InterruptedException ie){}
}
} // synchronized 끝
}
}
}
class Consumer extends Thread {
Store store;
Consumer(Store store) {
this.store = store;
}
public void run() {
while(true) {
synchronized(store) {
while(store.bread<=10) {
try{
Thread.sleep(500);
}catch(InterruptedException ie){}
}
store.bread--;
System.out.println("소비==>"+store.bread);
try{
Thread.sleep(500);
}catch(InterruptedException ie){}
} // synchronized 끝
}
}
}