生产者消费者是多线程很经典的一个模型
牵涉三个对象:仓库、生产者、消费者
仓库代表共享变量
生产者表示在仓库生产货物
消费者表示从仓库拿出货物

实现思路:利用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();}
}

运行结果:

模拟生产者消费者模型相关推荐

  1. C++编程模拟生产者消费者模型

    生产者消费者问题是操作系统中典型的进程同步互斥问题,(英语:Producer-Consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同 ...

  2. Linux实现生产者消费者模型

    生产者消费者模型 简单来说就是"321原则(并非某一规则,而是为了理解生产者消费者模型)" "3"代表的是三种关系 生产者与消费者的互斥与同步关系 生产者与生产 ...

  3. Python之路(第三十八篇) 并发编程:进程同步锁/互斥锁、信号量、事件、队列、生产者消费者模型...

    一.进程锁(同步锁/互斥锁) 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的, 而共享带来的是竞争,竞争带来的结果就是错乱,如何控制,就是加锁处理. 例 ...

  4. 4月25日 python学习总结 互斥锁 IPC通信 和 生产者消费者模型

    一.守护进程 import random import time from multiprocessing import Processdef task():print('name: egon')ti ...

  5. linux知识(二)互斥量、信号量和生产者消费者模型

    linux知识(二)互斥量.信号量和生产者消费者模型 一.互斥量 产生原因 二.信号量 生产者消费者模型 一.互斥量 产生原因 使用多线程常常会碰到数据混乱的问题,那么使用互斥量,相当于"加 ...

  6. 生产者消费者代码c语言_由生产者消费者模型引出的线程同步问题

    由生产者消费者模型引出的线程同步问题 基本生产者消费者模型: 代码示例: 数据模型: /*** Created by IntelliJ IDEA.** @Author: ZhangDong* @Dat ...

  7. 线程同步之 生产者消费者模型详解

    前言 博主本来没打算讲这个比较前面的知识的(博主socket编程还有两个部分没讲,进程也才写完回收僵尸进程的三种方法,信号捕捉器也才完结),但是今天有朋友来问博主,什么是生产者消费者模型,所以博主就先 ...

  8. Java生产者 消费者模型的一种实现

    本文主要介绍java中生产者/消费者模式的实现,对java线程锁机制的一次深入理解. 生产者/消费者模型 生产者/消费者模型要保证,同一个资源在同一时间节点下只能被最多一个线程访问,这个在java中用 ...

  9. 进程锁、事件、进程队列、进程间共享数据、生产者消费者模型

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 进程锁(Lock) 锁的基本概念 锁的基本用法 模拟12306抢票软件 信号量:Semaphone 概念 Semaphore ...

最新文章

  1. 2018年4月13日_Java的最新发展– 2018年4月下旬
  2. leetcode950. 按递增顺序显示卡牌
  3. ASP.NET MVC 入门10、Action Filter 与 内置的Filter实现(实例-防盗链)
  4. SQL Server数据库快照
  5. 李彦宏候选工程院院士;陌陌回应探探下架;拼多多回应“刷单”质疑 | 极客头条...
  6. Windows的一些网络设置
  7. pyqt5多进程 python_Python 多进程大全
  8. python中的is和==
  9. 1078 Hashing (25 分) 解决冲突采用正向增加的二次探查法
  10. 音频3A测试 AGC自动增益测试
  11. SpringBoot体验Mybatis、MybatisPlus、TKMybatis
  12. 第四周作业-多线程编程
  13. 怎么用Goldwave剪辑音乐?GoldWave绿色汉化版使用教程分享
  14. 云主机试用,云主机最高14天试用
  15. 数学知识的一些常用公式
  16. 江苏大学创新创业学分计算机学院,江苏大学创新学分评定标准
  17. 吴刚谈数位红创业故事-4万起步七年历程回顾
  18. 网络编程基础 --> 网络通信机理、报文与协议、套接字通信预备
  19. 深势科技创始人首席科学家张林峰:AI+分子模拟,赋能药物发现新源头
  20. 2-wireshark网络安全分析——MAC地址泛洪攻击

热门文章

  1. 入伏从哪天算起比较准确性_2020入伏从哪天算起 2020入伏时间计算表一览
  2. 考研高数思维导图(手写版)
  3. Django学习笔记 ORM操作 From菜鸟教程
  4. 在淘宝我学到了什么?
  5. 湖南大学平台2串口部分第二次实验
  6. 【2023-03-12】拼多多春招笔试四道编程题
  7. 硬盘分区最好几个比较合适
  8. python colorbar范围_python – 设置matplotlib colorbar范围
  9. Openstack Basic
  10. matlab——矩阵点乘,叉乘