wait和notify实现的生产者消费者线程交互


public class ProductTest
 {
      public static void main(String args[])
      {
           Repertory repertory=new Repertory();
          new Thread(new Producer(repertory)).start();
          new Thread(new Consumer(repertory)).start();
      }
}


class Repertory{
      private int product=0;

      public synchronized void addProduct()
       {
               if(this.product>=5)
                  {
                      try{
                             this.wait();
                          }catch(Exception e)
                         {
                         e.printStackTrace();
                          }
                  }
             else
               {
               product++;
               System.out.println("生产者生成第"+product+"个产品");
               this.notifyAll();
             }
     }

      public synchronized void getProduct()
  {
          if(this.product<=0)
          {
                    try{
                          this.wait();
                        }catch(Exception e)
                            {
                              e.printStackTrace();
                             }
          }
         else
           {
               System.out.println("消费者取走了第"+product+"个产品");
               product--;
              this.notifyAll();
          }
       }

  }


class Producer implements Runnable{
    private Repertory repertory;
    public Producer(Repertory repertory)
   {
    this.repertory=repertory;
    }

    public void run(){
       System.out.println("生产者开始生产产品");
         while(true)
      {
          try{
             Thread.sleep((int)(Math.random()*10)*100);
              }catch(Exception e)
             {
                e.printStackTrace();
             }
            repertory.addProduct();
        }
   }
}




class Consumer implements Runnable{
     private Repertory repertory;
     public Consumer(Repertory repertory)
    {
     this.repertory=repertory;
    }

      public void run()
      {
         System.out.println("消费者开始取走产品");
         while(true)
        {
                try{
                     Thread.sleep((int)(Math.random()*10)*100);
                   }catch(Exception e)
                  {
                        e.printStackTrace();
                 }
                repertory.getProduct();
       }
     }
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值