zoukankan      html  css  js  c++  java
  • 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 }

     

  • 相关阅读:
    个人第三次作业——原型设计
    《构建之法》团队作业第一次
    vsCode如何将结果输入到调试控制台
    Beta-冲刺第三天
    Beta版本(有更改)
    Beta冲刺-第二天
    Beta冲刺—第一天
    个人作业-测试
    团队项目—系统设计
    团队项目-需求分析
  • 原文地址:https://www.cnblogs.com/wenfei123chai/p/4415153.html
Copyright © 2011-2022 走看看