生产者-消费者模式

  • 生产者负责生产产品。
  • 消费者负责取走并使用产品。
  • 生产者生产完成后通知消费者可以取走产品了。
  • 消费者消费完产品后需要通知生产者生产产品。
  • 生产者没有生产完成,消费者不能取走产品。
  • 消费者没有使用完产品,生产者不能生产产品。
  1 package Main;
  2 
  3 import java.util.ArrayList;
  4 import java.util.List;
  5 import java.util.concurrent.Callable;
  6 
  7 class Product
  8 {
  9     private Object lockObj = new Object();
 10     private String name;
 11     private String content;
 12     private boolean available = false;
 13     
 14     public void setInfo(String name, String content)
 15     {
 16         synchronized(this.lockObj)
 17         {
 18             if(this.available == true) //可以获取 不能生产
 19             {
 20                 try
 21                 {
 22                     this.lockObj.wait();
 23                 }catch(Exception e)
 24                 {}
 25             }
 26             
 27             
 28             this.name = name;
 29             try
 30             {
 31                 Thread.sleep(200);
 32             }catch(Exception ignore)
 33             {}
 34             
 35             this.content = content;
 36             
 37             this.available = true;//生产完成
 38             this.lockObj.notifyAll();
 39         }
 40     }
 41     
 42     public void showInfo()
 43     {
 44         StringBuffer info = new StringBuffer();
 45         synchronized(this.lockObj)
 46         {
 47             if(this.available == false)
 48             {
 49                 try
 50                 {
 51                     this.lockObj.wait();
 52                 }catch(Exception e)
 53                 {}
 54             }
 55             info.append("name:").append(this.name);
 56             try
 57             {
 58                 Thread.sleep(100);
 59             }catch(Exception e)
 60             {}
 61             info.append(" content:" + this.content);
 62             System.out.println(info.toString());
 63             this.available = false;
 64             this.lockObj.notifyAll();
 65         }
 66     }
 67 }
 68 
 69 class Producer implements Runnable
 70 {
 71     private Product product ;
 72     public Producer(Product product)
 73     {
 74         this.product = product;
 75     }
 76     
 77     @Override
 78     public void run()
 79     {
 80         for(int i = 1; i <= 100; i ++)
 81         {
 82             if(i % 2 ==0)
 83             {
 84                 this.product.setInfo("笔记本", "惠普笔记本,妈妈再也不用担心冬天没暖气了");
 85             }else
 86             {
 87                 this.product.setInfo("Galaxy Note7", "出门旅行,杀人灭口必备武器");
 88             }
 89         }
 90     }
 91 }
 92 
 93 class Consumer implements Runnable
 94 {
 95     private Product product ;
 96     public Consumer(Product product)
 97     {
 98         this.product = product;
 99     }
100     
101     @Override
102     public void run()
103     {
104         for(int i =1; i <= 100; i++)
105         {
106             this.product.showInfo();
107         }
108     }
109 }
110 
111 public class Main
112 {
113     public static void main(String[] args) throws Exception
114     {
115          Product product = new Product();
116          Producer producer = new Producer(product);
117          Consumer consumer = new Consumer(product);
118          Thread tProducer = new Thread(producer);
119          Thread tConsumer = new Thread(consumer);
120         
121          tProducer.start();
122          tConsumer.start();
123          tProducer.join();
124          tConsumer.join();
125         
126         System.out.println("Main Done//~~");
127     }
128 }

 

posted on 2016-10-07 12:31  kuillldan  阅读(215)  评论(0编辑  收藏  举报