多线程生产者与消费者

  1 //资源类 1.资源变量 2.生产方法 3.消费方法
  2 class Box{
  3     private int product=0;   //资源变量
  4    
  5     public  synchronized void addProduct(){
  6          
  7      //首先要判断盒子中产品是否大于10,大于就停止生产,否则就继续生产
  8      if(this.product >10){
  9          try{
 10               this.wait();
 11          }catch(InterruptedException e){
 12             e.printStackTrace();
 13          }
 14         
 15      }else{
 16 
 17          //打印生产了多少个产品
 18          System.out.println("这是生产的第" + this.product + "个产品");
 19          this.product++;
 20 
 21          //需要唤醒消费者线程开始消费
 22          this.notifyAll();
 23      }
 24     
 25     }
 26 
 27      public  synchronized void getProduct(){
 28          
 29      //首先要判断盒子中产品是否小0,小于就停止消费,否则就继续消费
 30      if(this.product <= 0){
 31          try{
 32               this.wait();
 33          }catch(InterruptedException e){
 34             e.printStackTrace();
 35          }
 36         
 37      }else{
 38 
 39          //打印消费了多少个产品
 40          System.out.println("这是消费的第" + this.product + "个产品");
 41          this.product--;
 42 
 43          //需要唤醒生产者线程开始消费
 44          this.notifyAll();
 45      }
 46     
 47     }
 48      
 49 }
 50 
 51 //生产者调用addProducter方法
 52 class Producter implements Runnable
 53 {
 54     //资源对象的引用
 55     Box box;
 56     public Producter(Box box){
 57        this.box = box;
 58     }
 59      
 60     public void run(){
 61        System.out.println("生产者开始生产了");
 62        while(true){
 63           try{
 64                Thread.sleep((int) Math.random()*10000);
 65           }
 66           catch(InterruptedException e)
 67            {
 68               e.printStackTrace();
 69            }
 70          
 71           box.addProduct();
 72        }
 73        
 74     }
 75 
 76 }
 77 
 78 //消费者调用getProduct方法
 79 class Consumer implements Runnable
 80 {
 81     //资源对象的引用
 82     Box box;
 83     public Consumer(Box box){
 84        this.box = box;
 85     }
 86      
 87     public void run(){
 88        System.out.println("消费者开始消费了");
 89        while(true){
 90           try{
 91                Thread.sleep((int) Math.random()*10000);
 92           }
 93           catch(InterruptedException e)
 94            {
 95               e.printStackTrace();
 96            }
 97          
 98           box.getProduct();
 99        }
100        
101     }
102 }
103 
104 public class ThreadDemo{
105 
106 //程序测试入口
107 public static void main(String[] args){
108 
109   Box box = new Box();
110 
111   Producter pd = new Producter(box);
112   Consumer cn = new Consumer(box);
113 
114   new Thread(pd).start();
115   new Thread(cn).start();
116 
117   }
118 }
原文地址:https://www.cnblogs.com/yiliweichinasoft/p/3043760.html