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 }

 

 

你可能感兴趣的:(thread)