模拟生产者消费者模型

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

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

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

仓库代表共享变量

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

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


实现思路:利用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

相关文章
|
3月前
|
测试技术
领域驱动设计问题之状态同步模型与状态机模型的主要区别是什么
领域驱动设计问题之状态同步模型与状态机模型的主要区别是什么
|
5月前
|
设计模式
LabVIEW建立生产者消费者
LabVIEW建立生产者消费者
48 3
|
5月前
|
数据采集 设计模式 缓存
LabVIEW生产者消费者架构
LabVIEW生产者消费者架构
138 2
|
5月前
用R语言模拟随机服务排队系统
用R语言模拟随机服务排队系统
|
5月前
用R语言模拟M / M / 1随机服务排队系统
用R语言模拟M / M / 1随机服务排队系统
|
5月前
|
SQL 供应链 安全
Linux多线程【生产者消费者模型】
Linux多线程【生产者消费者模型】
93 0
|
安全 Linux 数据安全/隐私保护
【Linux线程同步】生产者消费者模型
【Linux线程同步】生产者消费者模型
106 0
|
存储 数据处理 容器
生产者消费者模型(一)
生产者消费者模型
141 0
|
存储
生产者消费者模型(二)
生产者消费者模型
70 0
使用一个例子探析:生产者消费者在多线程之间的通信的使用
使用一个例子探析:生产者消费者在多线程之间的通信的使用
116 0