java 生产者和消费者demo

Posted ter-yang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 生产者和消费者demo相关的知识,希望对你有一定的参考价值。

  1 package com.benq;
  2 
  3 import java.util.*;
  4 import java.util.concurrent.TimeUnit;
  5 
  6 public class HH 
  7     public static void main(String[] args)
  8 
  9         var store=new MyStore<Integer>(20);
 10 
 11         for(int i=0;i<10;i++)
 12             var producer=new Procuder<Integer>(store);
 13             producer.set(i);
 14             var t=new Thread(producer);
 15             t.setDaemon(true);
 16             t.start();
 17 
 18             var consumer=new Consumer<Integer>(store);
 19             var t1=new Thread(consumer);
 20             t1.setDaemon(true);
 21             t1.start();
 22         
 23 
 24         try 
 25             TimeUnit.SECONDS.sleep(10);
 26         catch (InterruptedException ie)
 27             ie.printStackTrace();
 28         
 29     
 30 
 31 
 32 interface IStore<T>
 33     void produce(T t);
 34     void consume();
 35 
 36 //仓库
 37 class MyStore<T> implements IStore<T>
 38     //存储物品
 39     private LinkedList<T> list;
 40     //当前物品数量
 41     private volatile int num;
 42     //仓库最大存储数量
 43     private int MAX_NUM;
 44 
 45     public MyStore(int maxNum) 
 46         this.list =new LinkedList<T>();
 47         this.MAX_NUM = maxNum>0?maxNum:100;
 48     
 49 
 50     @Override
 51     public void produce(T t) 
 52 
 53         synchronized (list)
 54             if (num+1>this.MAX_NUM)
 55                 try 
 56                     list.wait();
 57                 catch (InterruptedException ie)
 58                     ie.printStackTrace();
 59                 
 60             
 61             list.add(t);
 62             System.out.println(Thread.currentThread().getName()+" produce "+t.toString());
 63             num++;
 64             System.out.println("the store count is "+ String.valueOf(num));
 65             list.notifyAll();
 66         
 67     
 68 
 69     @Override
 70     public void consume() 
 71         synchronized (list)
 72             if (this.num==0)
 73                 try 
 74                     list.wait();
 75                 catch (InterruptedException ie)
 76                     ie.printStackTrace();
 77                 
 78             
 79             T t= list.remove();
 80             System.out.println(Thread.currentThread().getName()+" consume "+t.toString());
 81             num--;
 82             System.out.println("the store count is "+ String.valueOf(num));
 83             list.notifyAll();
 84         
 85     
 86 
 87 
 88 class Procuder<T> implements Runnable
 89 
 90     private MyStore<T> store;
 91     private T t;
 92 
 93     public Procuder(MyStore<T> store) 
 94         this.store = store;
 95     
 96 
 97 
 98     public void set(T t) 
 99         this.t=t;
100     
101 
102 
103     @Override
104     public void run() 
105         if (this.store!=null)
106             store.produce(this.t);
107 
108         
109     
110 
111 
112 class Consumer<T> implements Runnable
113 
114     private MyStore<T> store;
115 
116     public Consumer(MyStore<T> store) 
117         this.store = store;
118     
119 
120     @Override
121     public void run() 
122         if (this.store!=null)
123             store.consume();
124         
125     
126 

 

以上是关于java 生产者和消费者demo的主要内容,如果未能解决你的问题,请参考以下文章

kafka-3python生产者和消费者实用demo

线程通信Demo

demo生产与消费

阻塞队列

生产者与消费者--demo1---bai

生产都消费者模式的一个demo,消费者设置缓存