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


  • 相关阅读:
    ::在c++中的应用
    VS2008工程一些操作
    vs2008添加链接库
    从服务器 (PC 端 ) 发送图片到客户端 (android 手机端 ) [转]
    Android PowerImageView实现,可以播放动画的强大ImageView[转]
    INI文件读写
    关于超链接伪类的使用,:link,:visited,:hover
    关于div的居中显示
    常见公告栏信息效果的实现
    利用ul,li,span,position:relative实现文本的居中显示
  • 原文地址:https://www.cnblogs.com/MarchThree/p/3720415.html
Copyright © 2011-2022 走看看