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();//执行消费者方法
    
     
}
}

这个程序模拟了现实生产者与消费者问题,生产者生产商品同时消费者购买商品。并且模拟了一个商店,当商店内的商品售罄时通知生产者生产商品,当商店内的仓库满了时等待消费者购买,并且通知生产者暂停生产。