码迷,mamicode.com
首页 > 编程语言 > 详细

java_Thread生产者与消费者 Demo

时间:2015-04-10 19:31:02      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:

  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 }

 

 

java_Thread生产者与消费者 Demo

标签:

原文地址:http://www.cnblogs.com/wenfei123chai/p/4415153.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!