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的主要内容,如果未能解决你的问题,请参考以下文章