java 生产者和消费者demo
标签:notifyall set add tac stat int util static ack
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(20);
10
11 for(int i=0;i){
12 var producer=new Procuder(store);
13 producer.set(i);
14 var t=new Thread(producer);
15 t.setDaemon(true);
16 t.start();
17
18 var consumer=new Consumer(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{
33 void produce(T t);
34 void consume();
35 }
36 //仓库
37 class MyStoreimplements IStore{
38 //存储物品
39 private LinkedList list;
40 //当前物品数量
41 private volatile int num;
42 //仓库最大存储数量
43 private int MAX_NUM;
44
45 public MyStore(int maxNum) {
46 this.list =new LinkedList();
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 Procuderimplements Runnable{
89
90 private MyStore store;
91 private T t;
92
93 public Procuder(MyStore 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 Consumerimplements Runnable{
113
114 private MyStore store;
115
116 public Consumer(MyStore 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
标签:notifyall set add tac stat int util static ack
原文地址:https://www.cnblogs.com/ter-yang/p/11161330.html
评论