模拟生产者消费者模型

简介: 生产者消费者是多线程很经典的一个模型牵涉三个对象:仓库、生产者、消费者

生产者消费者是多线程很经典的一个模型

牵涉三个对象:仓库、生产者、消费者

仓库代表共享变量

生产者表示在仓库生产货物

消费者表示从仓库拿出货物


实现思路:利用synchronized+wait()+notify()

对生产者消费者对应的操作用synchronized关键字保证线程安全,通过wait()和notify()实现生产者消费者的通讯


实现方式还有好几种,这里只例举一种,其他几种请参考java线程间通讯的几种方式


demo

public class Programmer {
    // bug数量,模拟仓库
    private int bug = 0;
    // 写bug,模拟生产者
    public synchronized void makingBug() throws InterruptedException {
        for (; ; ) {
            if (bug < 5) {
                System.out.println(Thread.currentThread().getName() + "写了一个bug,当前bug数:" + ++bug);
                //模拟写bug花费的时间
                Thread.sleep(100);
            } else {
                System.out.println("======bug太多被老板画了饼,开始修复bug======");
                notify();
                wait();
            }
        }
    }
    // 修bug,模拟消费者
    public synchronized void fixingBug() throws InterruptedException {
        for (; ; ) {
            if (bug > 0) {
                System.out.println(Thread.currentThread().getName() + "修复了一个bug,当前bug数:" + --bug);
                //模拟修复bug花费的时间
                Thread.sleep(100);
            } else {
                System.out.println("======bug修完了,继续摸鱼======");
                notify();
                wait();
            }
        }
    }
    public static void main(String[] args) throws InterruptedException {
        // new一个苦逼程序员
        Programmer programmer = new Programmer();
        new Thread(() -> {
            try {
                programmer.makingBug();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }, "摸鱼模式的程序员").start();
        new Thread(() -> {
            try {
                programmer.fixingBug();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }, "刚被老板画饼的程序员").start();
    }
}

运行结果:

20210716171502754.png

相关文章
|
存储
生产者消费者模型(二)
生产者消费者模型
83 0
|
存储 数据处理 容器
生产者消费者模型(一)
生产者消费者模型
155 0
|
Java
高并发编程-线程生产者消费者的综合示例
高并发编程-线程生产者消费者的综合示例
84 0
生产者消费者模式
生产者消费者模式
|
消息中间件 前端开发 Java
Actor 模型工作机制和消息机制 | 学习笔记
快速学习 Actor 模型工作机制和消息机制
Actor 模型工作机制和消息机制 | 学习笔记
使用一个例子探析:生产者消费者在多线程之间的通信的使用
使用一个例子探析:生产者消费者在多线程之间的通信的使用
134 0
|
安全 C++
模拟生产者-消费者问题和读者-写者问题
模拟生产者-消费者问题和读者-写者问题
406 0
模拟生产者-消费者问题和读者-写者问题
|
并行计算 程序员
《并行计算的编程模型》一3.7.4 广播
本节书摘来华章计算机《并行计算的编程模型》一书中的第3章 ,第3.7.4节, [(美)帕万·巴拉吉(Pavan Balaji)编著;张云泉等译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
2405 0