zoukankan      html  css  js  c++  java
  • 【Java基础】生产者消费者模式

    很多项目后台逻辑实际上就是生产者消费者的关系,实现生产者消费者的方式有很多中,去泰国每天要喝至少三杯芒果冰沙,就拿制作芒果冰沙为例子,商家是生产者,我是消费者,可能同时有很多个消费者,1.要保证生产的芒果冰沙有柜台可以放的下,设置最大能放100杯;2.当柜台上芒果冰沙数为0时,消费者需要等待:

    /**
     * Created by zw on 2019/5/15.
     * 存放芒果冰沙
     */
    public class Storage {
    
        private final int MAX_SIZE = 100;
    
        private LinkedList<MangoIce> mangoIceLinkedList = new LinkedList<>();
    
        public void produce(){
            synchronized (mangoIceLinkedList){
                //如果仓库满了
                if(mangoIceLinkedList.size() + 1 > MAX_SIZE){
                    try {
                        mangoIceLinkedList.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }else {
                    mangoIceLinkedList.add(new MangoIce());
                    System.out.println("【目前剩余的冰沙数】:" + mangoIceLinkedList.size());
                    mangoIceLinkedList.notifyAll();
                }
    
            }
        }
    
        public void consume(){
            synchronized (mangoIceLinkedList){
                //如果仓库为空 不用消费
                if(mangoIceLinkedList.size() == 0){
                    try {
                        mangoIceLinkedList.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }else {
                    mangoIceLinkedList.remove();
                    System.out.println("【目前消费后的冰沙数】:" + mangoIceLinkedList.size());
                    mangoIceLinkedList.notifyAll();
                }
            }
        }
    
        public static void main(String[] args) {
            Storage storage = new Storage();
            Producer producer = new Producer(storage);
            Producer producerB = new Producer(storage);
            Producer producerC = new Producer(storage);
            Producer producerD = new Producer(storage);
            Producer producerE = new Producer(storage);
            Consumer consumer = new Consumer(storage);
            Consumer consumerB = new Consumer(storage);
    
            producer.start();
            consumer.start();
            producerB.start();
            consumerB.start();
            producerC.start();
            producerD.start();
            producerE.start();
        }
    }
    
    /**
     * Created by zw on 2019/5/15.
     * 生产者
     */
    public class Producer extends Thread{
        private Storage storage;
    
        public Producer(Storage storage){
            this.storage = storage;
        }
    
        @Override
        public void run() {
            storage.produce();
        }
    }
    
    /**
     * Created by zw on 2019/5/15.
     * 消费者
     */
    public class Consumer extends Thread {
        private Storage storage;
    
        public Consumer(Storage storage){
            this.storage = storage;
        }
    
        @Override
        public void run() {
            storage.consume();
        }
    }
    欢迎关注Java流水账公众号
  • 相关阅读:
    将浏览器变成文本编辑器
    《奋斗吧!菜鸟》 第七次作业:团队项目设计完善&编码
    java第二周作业
    java第一周作业
    java第三周作业
    java暑期作业
    java第四周学习总结
    正则表达式常用的js验证
    学习网址
    jquery 操作下拉框
  • 原文地址:https://www.cnblogs.com/guofu-angela/p/10867205.html
Copyright © 2011-2022 走看看