生產者消費者問題


public class Producer_Consumer {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  GoDown gd=new GoDown(20);
  Producer p=new Producer(10,gd);
  Producer p2=new Producer(30,gd);
  Producer p3=new Producer(30,gd);
  Producer p4=new Producer(40,gd);
  Producer p5=new Producer(50,gd);
  Customer c1=new Customer(10,gd);
  Customer c2=new Customer(50,gd);
  Customer c3=new Customer(60,gd);
  Customer c4=new Customer(10,gd);
  Customer c5=new Customer(10,gd);
  p.start();
  p2.start();
  p3.start();
  p4.start();
  p5.start();
  c1.start();
  c2.start();
  c3.start();
  c4.start();
  c5.start();
 }

}

class GoDown{
 public static final int MAX_NUM=100;
 public int curr_num;
 public GoDown(){}
 public GoDown(int num){
  this.curr_num=num;
 }
 
 public synchronized void produce(int n){
  while((this.curr_num+n)>MAX_NUM)
  {
   System.out.println("倉庫已經滿了,不能再生產了!");
   try {
    wait();
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
  curr_num+=n;
  System.out.println("已經生產了"+n+"個產品,庫存爲"+curr_num+"個產品。");
  notifyAll();
 }
 
 public synchronized void consume(int n){
  while(this.curr_num<n)
  {
   System.out.println("庫存產品不夠了!");
   try {
    wait();
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
  curr_num-=n;
  System.out.println("已經消費了"+n+"個產品,庫存爲"+curr_num+"個產品。");
  notifyAll();
 }
}

class Customer extends Thread{
 private int num;
 private GoDown godown;
 public Customer(int num, GoDown godown) {
  super();
  this.num = num;
  this.godown = godown;
 }
 @Override
 public void run() {
  // TODO Auto-generated method stub
  godown.consume(num);
 }
 
}

class Producer extends Thread{
 private int num;
 private GoDown godown;
 public Producer(int num, GoDown godown) {
  super();
  this.num = num;
  this.godown = godown;
 }
 @Override
 public void run() {
  // TODO Auto-generated method stub
  godown.produce(num);
 }
 
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章