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

    /**
    * 生产者(Productor)将产品交给店员(Clerk),消费者(Customer)从店员取走产品
    * 店员只能持有固定的数目产品(例如:20
    * 如果店员的产品满了,会通知生产者停一下。
    * 如果店员的产品没了,会通知消费者等一下。
    * 是多线程问题,多个消费者,多个生产者,共享数据是产品和店员
    *
    
    
    /**
     * 店员
     */
    class Clerk{
        // 产品数量
        private int productCount = 0;
    
        /**
         * 生产产品
         */
        public synchronized void produceProduct() {
            if(productCount<20){
                productCount++;
                System.out.println(Thread.currentThread().getName()+"生产产品,目前产品数:"+productCount);
    
                // 生产完就唤醒消费者
                notify();
            }else{
                // 等待
                try {
                    wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    
        public synchronized void consumeProduct() {
            if(productCount>0){
                System.out.println(Thread.currentThread().getName()+"消费产品,目前产品号:"+productCount);
                productCount--;
    
                // 消费完就唤醒生产者
                notify();
    
            }else{
                // 等待
                try {
                    wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    /**
     *生产者
     */
    class Producer extends Thread{
        private Clerk clerk;
    
        public Producer(Clerk clerk) {
            this.clerk = clerk;
        }
    
        @Override
        public void run() {
            System.out.println(getName()+"开始生产产品...");
            while(true){
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                clerk.produceProduct();
            }
        }
    }
    /**
     * 消费者
     */
    class Consumer extends Thread{
        private Clerk clerk;
    
        public Consumer(Clerk clerk) {
            this.clerk = clerk;
        }
    
        @Override
        public void run() {
            System.out.println(getName()+"开始消费产品....");
            while(true){
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                clerk.consumeProduct();
            }
        }
    }


  • 相关阅读:
    USB2.0协议学习笔记---USB工作过程(类的方法)
    USB2.0协议学习笔记---USB数据包结构
    (转)css选择器及其优先级
    通用后台管理系统UI模板-AdminLTE简介及构造动态菜单栏
    css定位研究
    css浮动知识点(转)
    深入理解cookie和session
    js中json知识点
    js中的循环
    jquey中json字符串与json的转换(转)
  • 原文地址:https://www.cnblogs.com/wsZzz1997/p/14641573.html
Copyright © 2011-2022 走看看