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


  • 相关阅读:
    递归函数 二分查找
    内置函数
    迭代器 生成器 推导式
    装饰器函数的有用信息
    函数名 闭包 装饰器
    动态参数 命名空间
    C#_LINQ(LINQ to Entities)
    C#_MVC 自定义AuthorizeAttribute实现权限管理
    C#_MVC3之使用Authorize简单的验证登录(一)
    C#_MVC_分页update
  • 原文地址:https://www.cnblogs.com/wsZzz1997/p/14641573.html
Copyright © 2011-2022 走看看