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


  • 相关阅读:
    Android 2.2 r1 API 中文文档系列(11) —— RadioButton
    Android API 中文 (15) —— GridView
    Android 中文 API (16) —— AnalogClock
    Android2.2 API 中文文档系列(7) —— ImageButton
    Android2.2 API 中文文档系列(6) —— ImageView
    Android 2.2 r1 API 中文文档系列(12) —— Button
    Android2.2 API 中文文档系列(8) —— QuickContactBadge
    [Android1.5]TextView跑马灯效果
    [Android1.5]ActivityManager: [1] Killed am start n
    Android API 中文(14) —— ViewStub
  • 原文地址:https://www.cnblogs.com/MarchThree/p/3720415.html
Copyright © 2011-2022 走看看