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();
        }
    
    }
    


  • 相关阅读:
    /bin,/sbin,/usr/sbin,/usr/bin 目录
    centos开放端口8080
    centos 创建用户组及用户
    oracle内存优化
    ORACLE概要文件
    【刷题】洛谷 P3834 【模板】可持久化线段树 1(主席树)
    【总结】莫比乌斯反演
    【刷题】洛谷 P3768 简单的数学题
    【刷题】BZOJ 4816 [Sdoi2017]数字表格
    【刷题】BZOJ 2693 jzptab
  • 原文地址:https://www.cnblogs.com/MarchThree/p/3720415.html
Copyright © 2011-2022 走看看