多線程「生產者,消費者」

public class Clerk {
 /**
  * 生產者
  */
       private int pro=0;
       
       public synchronized void add(){
        if(this.pro>=10){
         try {
    wait();//生產滿了
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
        }else{
         pro++;
         System.out.println("生產者今天生產了"+pro+"個產品");
         notifyAll();//生產了商品,喚醒消費者購買線程。
        }
     
       }
       /**
        * 消費者
        */
       public synchronized void get(){
          if(pro<=0){
           try {
     wait();
    } catch (InterruptedException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }//產品沒有貨了
          }else{
           pro--;
           System.out.println("消費者今天取了"+pro+"個產品");
           notifyAll();  // 喚醒其餘線程,當有出售商品時則喚醒生產者進行生產商品
           
          }
       }
}




public class consumer implements Runnable{
   /**
    * 生產者開始取走東西
    */
   private Clerk c;
   public consumer(Clerk c){
    this.c=c;
   }
 public void run() {
    System.out.println("消費者開始取走商品");
   while(true){//判斷是否是爲真
     try {
    Thread.sleep((long) (Math.random()*10)*100);//每執行一次就開始休眠
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
     c.get();//消費者開始取走商品
   }
  
  
 }
     
}



public class producer implements Runnable{
    private Clerk c;
    public producer(Clerk c){
     this.c=c;
    }
 @Override
 /**
  * 生產者開始生產商品
  */
 public void run() {
  System.out.println("生產者開始生產商品");
   while(true){
    try {
     Thread.sleep((long) (Math.random()*10)*110);
    } catch (InterruptedException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }//每生產一次就開始休眠,休眠時間隨機
    c.add();
   }
 }
}


public class mian {
   public static void main(String[] args) {
    
    Clerk c=new Clerk();//new一下cleark類  取名爲c
    Thread co=new Thread(new consumer(c));//new一下生產者類 取名爲co
    Thread pr=new Thread(new producer(c));//new一下消費者類 取名爲pr
    
    co.start();//執行生產者方法
    pr.start();//執行消費者方法
    
     
}
}

這個程序模擬了現實生產者與消費者問題,生產者生產商品同時消費者購買商品。而且模擬了一個商店,當商店內的商品售罄時通知生產者生產商品,當商店內的倉庫滿了時等待消費者購買,而且通知生產者暫停生產。java

相關文章
相關標籤/搜索