美文网首页
java中的生产者和消费者问题

java中的生产者和消费者问题

作者: 陈柴盐 | 来源:发表于2019-04-13 21:14 被阅读0次
public class Demo14 {
    public static void main(String[] args)  {
        // 创建包子容器
        ArrayList<String> list = new ArrayList<>();

        new Thread(new BaoZiPu(list)).start();
        new Thread(new ChiHuo(list)).start();
    }
}
生产者
public class BaoZiPu implements Runnable {
    private ArrayList<String> list;

    public BaoZiPu(ArrayList<String> list) {
        this.list = list;
    }

    @Override
    public void run() {
        System.out.println("包子铺启动了...");
        int num = 1;
        while (true) { // 循环来生成包子
            synchronized (list) {
                // 1.如果有包子就等待
                if (list.size() > 0) {
                    try {
                        list.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                // 2.如果没有包子就生成一个包子,通知吃货线程
                String baoZi = "包子" + num;
                num++;
                list.add(baoZi);
                System.out.println("包子铺生成一个包子: " + list);
                list.notify();
            }
        }
    }
}

消费者
public class ChiHuo implements Runnable {
    private ArrayList<String> list;

    public ChiHuo(ArrayList<String> list) {
        this.list = list;
    }

    @Override
    public void run() {
        System.out.println("吃货启动了...");

        while (true) { // 循环吃包子
            synchronized (list) {
                // 1.如果没有包子就等待
                if (list.size() == 0) {
                    try {
                        list.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }

                // 2.如果有包子就吃包子,通知包子铺
                String baozi = list.remove(0);
                System.out.println("吃货吃了一个包子: " + baozi);
                list.notify();
            }
        }
    }
}

划重点:生产者和消费者用的锁都是在main 方法中创建的list,这才可以彼此相互唤醒

有没有感觉这个跟ActiveMQ或RabbitMq的消息队列很像?但消息队列中消费者不需要通知生产者,个人觉得消息队列的设计更像观察者模式那样.

相关文章

  • 操作系统知识点持续更新

    生产者消费者问题 关于生产者消费者问题可以参考这篇文章:生产者消费者问题的java实现 临界区与互斥量 临界区:保...

  • Java 实现生产者和消费者的三种方法

    Java 实现生产者和消费者的三种方法 生产者消费者模型是我们讨论同步问题里面必须要学习的,生产者和消费者公用一块...

  • Java中生产者与消费者模式

    java生产者与消费者模式 生产者和消费者模式是我们在学习多线程中很经典的一个模式,它主要分为生产者和消费者,分别...

  • java同步

    生产者与消费者问题。 概念 在 Java 中可以用 wait、notify 和 notifyAll 来实现线程间的...

  • 理解消息队列 - 使用场景简介

    在之前的 Java 理解生产者-消费者设计模式 一文中,我们学习了生产者-消费者模式,生产者和消费者之间通过一个缓...

  • 生产者和消费者问题

    生产者和消费者问题 问题简述 组成 系统中有一组生产者和消费者进程 生产者生产者将产品放入缓冲区 消费者消费者进程...

  • 经典生产者-消费者问题解析

    1.生产者-消费者问题 生产者和消费者问题在现实系统中是很普遍的。例如在一个多媒体系统中,生产者编码视频帧,而消费...

  • Java精讲:生产者-消费者

    原文链接 更多教程 本文概要 生产者和消费者问题是线程模型中老生常谈的问题,也是面试中经常遇到的问题。光在Java...

  • 生产者消费者

    什么是生产者和消费者 生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。 生产者和消费者彼此之间不直...

  • 9. python多进程之Queue实现生产者消费者模型

    一、概述 什么是生产者消费者模式生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此...

网友评论

      本文标题:java中的生产者和消费者问题

      本文链接:https://www.haomeiwen.com/subject/dggrwqtx.html