zoukankan      html  css  js  c++  java
  • Java_生产者消费者模式

    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
    package testdemo1;
    
    import java.util.logging.Level;
    import java.util.logging.Logger;
    
    class Mantou {
    
        private int id;
    
        public Mantou(int val) {
            this.id = val;
        }
    
        public String toString() {
            return "Mantou id: " + this.id;
        }
    }
    
    class Basket {
    
        private Mantou[] mStack = new Mantou[6];
        private int index = 0;
    
        public synchronized void push(Mantou m) {
            while (index == mStack.length) {
                try {
                     this.wait();
                    System.out.println("full........................!!!");
                   
                } catch (InterruptedException ex) {
                    Logger.getLogger(Basket.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            this.notify();
            
            mStack[index] = m;
    
            index++;
    
            System.out.println("add Mantou id= " + m + " and index= " + index);
           
    
        }
    
        public synchronized Mantou pop() {
    
            while (index == 0) {
    
                try {
                    System.out.println("empty........................!!!");
                    wait();
                } catch (InterruptedException ex) {
                    Logger.getLogger(Basket.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            this.notify();
            index--;
            Mantou m = mStack[index];
            System.out.println("get Mantou id= " + m + " and index= " + index);
    
            
            return m;
        }
    }
    
    class Producer implements Runnable {
    
        private Basket brasket = new Basket();
    
        public Producer(Basket val) {
            this.brasket = val;
        }
    
        @Override
        public void run() {
            for (int i = 0; i < 20; i++) {
                Mantou m = new Mantou(i);
                brasket.push(m);
    
                try {
                    //            Thread.sleep(Math);
                    Thread.sleep((int) (Math.random() * 500));
                } catch (InterruptedException ex) {
                    Logger.getLogger(Producer.class.getName()).log(Level.SEVERE, null, ex);
                }
    
            }
        }
    
    }
    
    class Consumer implements Runnable {
    
        private Basket brasket = new Basket();
    
        public Consumer(Basket val) {
            this.brasket = val;
        }
    
        @Override
        public void run() {
            for (int i = 0; i < 20; i++) {
                Mantou m = brasket.pop();
                try {
                    Thread.sleep((int) (Math.random() * 1000));
                } catch (InterruptedException ex) {
                    Logger.getLogger(Consumer.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
    }
    
    public class TestDemo1 {
    
        public static void main(String[] args) {
            // TODO code application logic here
            Basket s = new Basket();
            Producer producer = new Producer(s);
            Consumer consumer = new Consumer(s);
            Thread tr1 = new Thread(producer);
            Thread tr2 = new Thread(consumer);
            tr1.start();
            tr2.start();
        }
    
    }
    


  • 相关阅读:
    笔记:Linux进程间通信机制
    Linux下C/C++和lua交互-Table
    @JsonFormat时间格式化注解使用
    关于 mybatis 报invalid comparison: java.util.Arrays$ArrayList and java.lang.String异常
    @RestControllerAdvice作用及原理
    MySQL 中 datetime 和 timestamp 的区别与选择
    idea提交svn忽略.class等文件的相关配置(so easy)
    PLSQL Developer建表时注释(COMMENT)中文乱码的解决方案(Windows)
    oracle客户端安装与配置
    PLSQL安装、PLSQL汉化、激活
  • 原文地址:https://www.cnblogs.com/MarchThree/p/3720415.html
Copyright © 2011-2022 走看看