首页 > 学院 > 开发设计 > 正文

java_Thread生产者与消费者 Demo

2019-11-14 23:42:44
字体:
来源:转载
供稿:网友
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 wenfei103  */104 class Consumer implements Runnable {105     SyncStack ss = null;106 107     Consumer(SyncStack ss) {108         this.ss = ss;109     }110 111     @Override112     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 block121                 e.printStackTrace();122             }123             // System.out.println(wt);124         }125     }126 127 }


上一篇:spring学习笔记1

下一篇:Mockito Hello World

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表