java_Thread生产者与消费者 Demo

  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 }

 

 

转载于:https://www.cnblogs.com/wenfei123chai/p/4415153.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值