Java多线程实现生产消费模式

java多线程实现生产消费模式:

看代码:

苹果篮子类:

  public   class  PublicBox { 
            private   int  apple  = 0;      
            public   synchronized  void  increace() { 
                while  ( apple  ==5) { 
                    try  
                       wait(); 
                   }  catch  (InterruptedException e) { 
                       e.printStackTrace(); 
                   } 
                  
               } 
                apple ++; 
                System.  out  .println( "生成苹果成功!"  );
               notify(); 
           }        
     
            public   synchronized  void  decreace() { 
                while  ( apple  ==0) { 
                    try  
                       wait(); 
                   }  catch  (InterruptedException e) { 
                       e.printStackTrace(); 
                   } 
               } 
                apple --; 
               System.  out .println(  "消费苹果成功!"  );
               notify(); 
           } 

}

两个线程分别代码生产者和消费者:

生产者:
public   class  Producer  implements  Runnable { 
     private  PublicBox  box
 
     public  Producer(PublicBox box) { 
         this  . box  = box; 
    } 
 
     @Override  
     public   void  run() { 
       
         for (  int  i=0;i<10;i++)  
       {
                try  {
                     System.  out  .println( "pro  i:"  +i);
                           Thread. sleep(30);
                     }  catch  (InterruptedException e) {
                             //  TODO : handle exception
                           e.printStackTrace();
                     }
       
             box .increace(); 
       }
        
    } 
}

消费者:

public   class  Customer  implements  Runnable { 
     private  PublicBox  box
 
     public  Producer(PublicBox box) { 
         this  . box  = box; 
    } 
 
     @Override  
     public   void  run() { 
       
         for (  int  i=0;i<10;i++)  
       {
                try  {
                     System.  out  .println( "pro  i:"  +i);
                           Thread. sleep(3000);
                     }  catch  (InterruptedException e) {
                             //  TODO : handle exception
                           e.printStackTrace();
                     }
       
             box .decreace(); 
       }
        
    } 
}

建立测试类:

public class Test{

   public static void main(args []){

        //新建一个苹果篮子对象,用于生产者和消费者往里面放入苹果和取出苹果

        PublicBox box=new PublicBox();

     //新建生产者

       Producer  p=new Producer(box);

     Customer c=new Producer(box);

     Thread t1=new Thread (p);

     Thread t2=new Thread (c);

     t1.start();

     t2.start();

   }  

}

这里的篮子对象上面的锁是对象锁,一个线程只能操作一个对象实例,notify()是唤醒与其竞争资源的线程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值