본문 바로가기

Java SE/Producer & Consumer 01

Producer & Consumer

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 끝
  }
 }
}