标签:
1 package com.bjsxt.Thread.Demo;
2 public class ProducerConsumer {
3 /**
4 * 生产者与消费者
5 * @param args
6 */
7 public static void main(String[] args) {// 模拟线程
8 SyncStack ss = new SyncStack();
9 Producer p = new Producer(ss);
10 Consumer c = new Consumer(ss);
11 new Thread(p).start();// 开启线程
12 new Thread(c).start();// 开启线程
13 }
14 }
15
16 /**
17 * Woto类
18 */
19 class WoTo {
20 int id;
21 WoTo(int id) {
22 this.id = id;
23 }
24 public String toString() {
25 return "WoTo : " + id;
26 }
27 }
28
29 /**
30 * 框类(用来装馒头)
31 * @author wenfei
32 */
33 class SyncStack {
34 int index = 0;
35 WoTo[] arrwt = new WoTo[6];
36
37 public synchronized void push(WoTo wt) {
38
39 while (index == arrwt.length) {
40
41 try {
42 this.wait();// 暂定当前对象
43
44 } catch (InterruptedException e) {
45 e.printStackTrace();
46 }
47 }
48 this.notify();// 叫醒当前线程
49 arrwt[index] = wt;
50 index++;
51 }
52
53 public synchronized WoTo pop() {
54 while (index == 0) {
55
56 try {
57 this.wait();
58 } catch (InterruptedException e) {
59 e.printStackTrace();
60 }
61 }
62 this.notify();
63 index--;
64 return arrwt[index];
65 }
66 }
67
68 /**
69 * 生产者
70 *
71 * @author wenfei
72 */
73 class Producer implements Runnable {
74 SyncStack ss = null;
75
76 Producer(SyncStack ss) {
77 this.ss = ss;
78 }
79
80 @Override
81 public void run() {
82 // 生产wt
83 for (int i = 0; i <= 100; i++) {
84 WoTo wt = new WoTo(i);
85 ss.push(wt);// 往篮子里装窝头
86 System.out.println("生产了--->" + wt);
87 try {
88 // Thread.sleep(1000);//每生产一个睡眠一秒
89 Thread.sleep((int) Math.random() * 1000);
90 } catch (InterruptedException e) {
91 // TODO Auto-generated catch block
92 e.printStackTrace();
93 }
94 }
95 }
96
97 }
98
99 /**
100 * 消费者
101 *
102 * @author wenfei
103 */
104 class Consumer implements Runnable {
105 SyncStack ss = null;
106
107 Consumer(SyncStack ss) {
108 this.ss = ss;
109 }
110
111 @Override
112 public void run() {
113 for (int i = 0; i <= 100; i++) {
114 WoTo wt = ss.pop();
115 System.out.println("消费了--->" + wt);
116 try {
117 // Thread.sleep(1000);//每消费一个睡眠一秒
118 Thread.sleep((int) Math.random() * 1000);//
119 } catch (InterruptedException e) {
120 // TODO Auto-generated catch block
121 e.printStackTrace();
122 }
123 // System.out.println(wt);
124 }
125 }
126
127 }
标签:
原文地址:http://www.cnblogs.com/wenfei123chai/p/4415153.html