当前位置: 首页 > news >正文

多线程-生产者消费者模型

一、基本信息

1、场景介绍:厨师和吃货的例子,吃货吃桌子上的面条,吃完让厨师做,厨师做完面条放桌子上,让吃货吃,厨师如果发现桌子上有面条,就不做,吃货发现桌子上没有面条就不吃。

2、线程实现基本步骤:

  1. 循环
  2. 同步代码块
  3. 循环退出条件
  4. 循环没有退出时,业务代码的实现

二、代码实现 

桌子类:

public class Desk {//食物状态public static int status = 0;//锁public static Object lock = new Object();//面条剩余数量public static int count = 5;
}

厨师类:

/*** 厨师做饭线程*/
public class Cookie extends Thread{/*** 多线线程实现的基本步骤:* 1、循环* 2、同步代码块* 3、循环的退出条件* 4、未退出时的业务代码逻辑*//*** 厨师的业务逻辑* 1、判断桌子上有没有面条* 2、有面条就等待;没有面条就做面条,并且唤醒等待的吃货吃面条*/@Overridepublic void run() {while (true){synchronized (Desk.lock){//判断面条数量if (Desk.count == 0) {break;}//判断桌子上是否有面条if (Desk.status == 1){//有面条时,就等待//这里需要用锁对象调用等待方法,目的是为了绑定锁和线程try {Desk.lock.wait();} catch (InterruptedException e) {e.printStackTrace();}}else {//没有面条就要做面条System.out.println(getName() + "做了一碗面条");//改状态,表示面条做好了Desk.status = 1;//唤醒吃货吃面条Desk.lock.notifyAll();}}}}
}

吃货类:

/*** 吃货*/
public class Foodie extends Thread {/*** 多线线程实现的基本步骤:* 1、循环* 2、同步代码块* 3、循环的退出条件* 4、未退出时的业务代码逻辑*//*** 吃货的业务逻辑* 1、判断桌子上有没有面条* 2、有面条就吃;没有面条就等待,并且唤醒等待的厨师做面条*/@Overridepublic void run() {while (true) {synchronized (Desk.lock) {//判断面条数量if (Desk.count == 0) {break;} else {//判断桌子上是否有面条if (Desk.status == 1) {Desk.count--;System.out.println(getName() + "吃了一碗面条");System.out.println(getName() + "还能吃" + Desk.count + "碗面条");Desk.status = 0;Desk.lock.notifyAll();}else {try {Desk.lock.wait();} catch (InterruptedException e) {e.printStackTrace();}}}}}}
}

 测试类:

public class TestCookie {public static void main(String[] args) {Cookie cookie = new Cookie();Foodie foodie = new Foodie();cookie.setName("厨师");foodie.setName("吃货");cookie.start();foodie.start();}
}

运行结果:

相关文章:

多线程-生产者消费者模型

一、基本信息 1、场景介绍:厨师和吃货的例子,吃货吃桌子上的面条,吃完让厨师做,厨师做完面条放桌子上,让吃货吃,厨师如果发现桌子上有面条,就不做,吃货发现桌子上没有面条就不吃。 …...

解压命令之一 gzip

文章目录 解压命令之一 gzip更多信息 解压命令之一 gzip gzip用于对后缀为gz文件进行解压: $ gzip -d data.gz这个命令将解压examplefile.gz,并且在当前目录下生成一个名为data的解压后的文件。 但特别需要留意的是,这个操作会删除源文件&…...

力扣:438. 找到字符串中所有字母异位词 题解

Problem: 438. 找到字符串中所有字母异位词 438. 找到字符串中所有字母异位词 预备知识解题思路复杂度Code其它细节推荐博客或题目博客题目滑动窗口哈希表 预备知识 此题用到了双指针算法中的滑动窗口思想,以及哈希表的运用。c中是unordered_map。如果对此不了解的u…...

QT 高DPI解决方案

一、根据DPI实现动态调整控件大小(三种方式) 1、QT支持高DPI(针对整个进程中所有的UI) // main函数中 QApplication::setAttribute(Qt::AA_EnableHighDpiScaling)tips:(1)如果不想全局设置&am…...

SLB、DMZ、Nginx、Ingress、Gateway、Kibana和Grafana

SLB、DMZ、Nginx、Ingress、Gateway、Kibana和Grafana虽然有一些相似之处,但是它们的功能和适用场景还是有所不同。 SLB主要用于将大流量的请求分配到多个服务器上进行处理,从而提高系统的可伸缩性和可靠性。它适用于需要处理大流量的应用,如…...

【已解决】Invalid bound statement (not found)

报错讯息 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.casey.mapper.SysRoleMapper.getUserRoleCode at org.apache.ibatis.binding.MapperMethod S q l C o m m a n d . < i n i t > ( M a p p e r M e t h o d . j a v a :…...

汽车信息安全--芯片厂、OEM安全启动汇总(1)

目录 1.芯驰E3安全启动 2.STM32 X-CUBE-SBSFU 3.小米澎湃OS安全启动 4.小结 我在前篇文章里详细记录了车规MCU信息安全设计过程关于网络安全架构的思考过程,从芯片原厂、供应商、OEM等角度思考如何建立起完备的信任链; 不过这思考过程仅仅只是一家之言,因此我又对比了国…...

气膜建筑:舒适、智能、可持续

气膜建筑之所以能够拥有广阔的发展空间&#xff0c;源于其融合了诸多优势特点&#xff0c;使其成为未来建筑领域的前沿趋势。 气膜建筑注重环境可持续性和能源效率。在材料和设计上&#xff0c;它采用可回收材料、提高热保温效果&#xff0c;并积极利用太阳能等可再生能源&…...

【C语言】一种状态超时阻塞循环查询的办法

【C语言】一种状态超时阻塞循环查询的办法 文章目录 【C语言】一种状态超时阻塞循环查询的办法1.方法12.方法21.方法1 static void wait_notify_async(notify_type_t notify_type) {static rt_tick_t exit_tick;exit_tick = rt_time_get_msec();lb_int32 notify_success = RT_F…...

【leetcode】力扣热门之回文链表【简单难度】

题目描述 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 用例 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true 输入&#xff1a;head [1,2] 输出&#xff1a;f…...

【MySQL】ALL函数的巧用 以及 排序(order by)巧用 sum(条件表达式) 语法

力扣题 1、题目地址 578. 查询回答率最高的问题 2、模拟表 SurveyLog 表&#xff1a; Column NameTypeidintactionENUMquestion_idintanswer_idintq_numinttimestampint 这张表可能包含重复项。action 是一个 ENUM(category) 数据&#xff0c;可以是 “show”、“answer”…...

Debezium发布历史49

原文地址&#xff1a; https://debezium.io/blog/2019/02/19/reliable-microservices-data-exchange-with-the-outbox-pattern/ 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. 使用发件箱模式进行可靠的微服务数…...

数据结构——队列(Queue)

目录 1.队列的介绍 2.队列工程 2.1 队列的定义 2.1.1 数组实现队列 2.1.2 单链表实现队列 2.2 队列的函数接口 2.2.1 队列的初始化 2.2.2 队列的数据插入&#xff08;入队&#xff09; 2.2.3 队列的数据删除&#xff08;出队&#xff09; 2.2.4 取队头数据 2.2.5 取队…...

uniapp微信小程序投票系统实战 (SpringBoot2+vue3.2+element plus ) -后端架构搭建

锋哥原创的uniapp微信小程序投票系统实战&#xff1a; uniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )_哔哩哔哩_bilibiliuniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )共计21条视频…...

两种方式实现mysql截取年月日

select date_format(now(), %Y-%m-%d) select substring(now(), 1, 10)...

WPF 使用矢量字体图标

矢量字体图标 在WPF项目中经常需要显示图标&#xff0c;但是项目改动后&#xff0c;有时候需要替换和修改图标&#xff0c;这样非常麻烦且消耗开发和美工的时间。为了快速开发项目&#xff0c;节省项目时间&#xff0c;使用图标矢量字体图标是一个非常不错的选择。 矢量字体图标…...

编程语言的语法糖,你了解多少?

什么是语法糖 语法糖是一种编程语言的特性&#xff0c;通常是一些简单的语法结构或函数调用&#xff0c;它可以通过隐藏底层的复杂性&#xff0c;并提供更高级别的抽象&#xff0c;从而使代码更加简洁、易读和易于理解&#xff0c;但它并不会改变代码的执行方式。 为什么需要语…...

MySQL中FLUSH TABLES命令语法

在MySQL中&#xff0c;FLUSH TABLES 命令的作用是刷新表。当你使用 FLUSH TABLES 命令的具体选项时&#xff08;例如 FLUSH TABLES WITH READ LOCK&#xff09;&#xff0c;该选项必须是在 FLUSH 语句中唯一指定的命令。即&#xff0c;在一个 FLUSH 语句中&#xff0c;你只能使…...

如何在小米4A刷OpenWRT系统并通过cpolar实现公网访问本地路由器

文章目录 前言1. 安装Python和需要的库2. 使用 OpenWRTInvasion 破解路由器3. 备份当前分区并刷入新的Breed4. 安装cpolar内网穿透4.1 注册账号4.2 下载cpolar客户端4.3 登录cpolar web ui管理界面4.4 创建公网地址 5. 固定公网地址访问 前言 OpenWRT是一个高度模块化、高度自…...

Spring学习之——事务控制

Spring中的事务控制 说明&#xff1a; JavaEE体系进行分层开发&#xff0c;事务处理位于业务层&#xff0c;Spring提供了分层设计业务层的事务处理解决方案。 Spring框架为我们提供了一组事务控制的接口。具体在后面的小节介绍。这组接口是在spring-tx.RELEASE.jar中。 spri…...

云原生技术专题 | 解密2023年云原生的安全优化升级,告别高危漏洞、与数据泄露说“再见”(安全管控篇)

背景介绍 2023年&#xff0c;我们见证了科技领域的蓬勃发展&#xff0c;每一次技术革新都为我们带来了广阔的发展前景。作为后端开发者&#xff0c;我们深受其影响&#xff0c;不断迈向未来。 随着数字化浪潮的席卷&#xff0c;各种架构设计理念相互交汇&#xff0c;共同塑造了…...

如何启用Windows电脑的内置Administrator账户

前言 不知道从什么时候开始&#xff0c;新电脑或者新系统开机之后都会出现一个界面让你创建一个账户&#xff0c;但这个账户有可能是本地账户&#xff08;Windows10&#xff09;还有强制你登录微软账户的&#xff08;Windows11&#xff09;。 好像曾经熟悉的电脑Administrator…...

智慧工厂:科技与制造融合创新之路

随着科技的迅猛发展&#xff0c;智慧工厂成为制造业领域的热门话题。智慧工厂利用先进的技术和智能化系统&#xff0c;以提高生产效率、降低成本、增强产品质量和灵活性为目标&#xff0c;正在引领着未来制造业的发展。 智慧工厂的核心是数字化和自动化生产&#xff0c;相较于传…...

SCADE—产品级安全关键系统的MBD开发套件

产品概述 随着新能源三电、智能驾驶等新技术的应用&#xff0c;汽车中衍生出很多安全关键零部件&#xff0c;如BMS、VCU、MCU、ADAS等&#xff0c;相应的软件在汽车中的比重越来越大&#xff0c;并且安全性、可靠性要求也越来越高。ANSYS主要针对安全关键零部件的嵌入式产品级软…...

PyTorch|保存与加载自己的模型

训练好一个模型之后&#xff0c;我们往往要对其进行保存&#xff0c;除非下次用时想再次训练一遍。 下面以一个简单的回归任务来详细讲解模型的保存和加载。 来看这样一组数据&#xff1a; xtorch.linspace(-1,1,50)xx.view(50,1)yx.pow(2)0.3*torch.rand(50).view(50,1) 画…...

javaScript:Math工具类方法

1 Math工具类方法: >和其他的类的不同&#xff0c;Math并不是一个构造函数&#xff0c;也就是无法通过new来创建Math的实例 >Math表示的数学&#xff0c;在Math对象中存储了一组数学运算相关的常量的和方法 >这些常量和方法可以直接通过Math来访问 >比如Math.P…...

ffmpeg转码新技能

ffmpeg转码新技能 mp3转wavmp4转gif mp3转wav 今天发现之前用ffmpeg转码不好使了。今天发现一个ffmpeg转码新的用法非常简单 ffmpeg -i 0104.mp3 -f wav 0104.wav mp4转gif 同学求助将mp4转gif。我先用剪影把mp4的多余黑边去除。然后用ffmpeg将mp4转出了gif ffmpeg -i shu…...

Docker学习笔记(一):Docker命令总结

Docker命令总结 一、Docker介绍1.1 镜像与容器区别 二、Docker命令 一、Docker介绍 Docker是一个开源的应用容器引擎&#xff0c;它允许开发者在几乎任何环境中运行应用程序&#xff0c;而无需担心运行环境的问题。Docker的核心概念是容器&#xff0c;它可以将应用程序及其依赖…...

JavaWeb——后端案例

五、案例 1. 开发规范—Restful REST&#xff08;Representational State Transfer&#xff09;&#xff0c;表述性状态转换&#xff0c;是一种软件架构风格 注&#xff1a; REST是风格&#xff0c;是约定方式&#xff0c;不是规定&#xff0c;可以打破描述模块的功能通常使…...

【CSS】浅学一下filter

目录 1、基本概念 2、用法 3、应用案例 更加智能的阴影效果&#xff1a; 元素、网页置灰 元素强调、高亮 毛玻璃效果 调整网页sepia 褐色值可以实现护眼效果 1、基本概念 CSS filter 属性将模糊或颜色偏移等图形效果&#xff08;对比度、亮度、饱和度、模糊等等&#…...

网站建设日程安排/新闻网站软文平台

2011年3月&#xff0c;VMware发布了虚拟化和云基础架构管理工具vCenter Operations。企业在实现基础架构虚拟化、平台虚拟化和终端虚拟化之后&#xff0c;虚拟化基础架构的管理被提上了议事日程。 一个改变 企业在从传统IT基础架构转向云计算架构的过程中&#xff0c;管理模式的…...

做网站界面设计大小/厦门seo代理商

本文是转载张元礼的博客 http://blog.csdn.Net/vincetest 一、测试需求描述 对服务后台一系列的http接口功能测试。 输入&#xff1a;根据接口描述构造不同的参数输入值 输出&#xff1a;XML文件 eg:http://xxx.com/xxx_product/test/content_book_list.jsp?listid1 二、实现方…...

WordPress提交留言/昆明长尾词seo怎么优化

闲着没事用 Matlab 制作一张 gif 动图吧&#xff0c;先看官方的帮助文档里的demo&#xff0c;代码如下&#xff1a;clear效果图如下&#xff1a;官方帮助文档里的demo似乎比较简单&#xff0c;如果有现成的图片&#xff0c;怎么做呢&#xff0c;看下面的代码&#xff1a;clear效…...

重庆梁平网站建设哪家好/互联网线上推广

作者▕ IT修真院编审▕ 暗灭编辑▕ 匹诺曹本文共3500字&#xff0c;预计阅读需要20分钟课程大纲第一阶段——HTML及CSS入门任务一&#xff1a;九宫格——用htmlcss制作一个网页1、盒模型、常见元素分类、调试如何理解盒模型及其content、padding、border、margin&#xff1f;常…...

网站安全证书出错怎么做/全球搜索引擎排名

Python3 运算符 什么是运算符&#xff1f; 本章节主要说明 Python 的运算符。 举个简单的例子: 4 5 9 例子中&#xff0c;4 和 5 被称为操作数&#xff0c; 称为运算符。 Python 语言支持以下类型的运算符: 接下来让我们一个个来学习Python的运算符。 Python算术运算符 以下假…...

wordpress 3.9 编辑文章 固定链接 不能编辑/宁波公司做网站

订单表 (order) |-- 自动编号&#xff08;order_id, 自增长主键&#xff09; |-- 订单单号&#xff08;order_no, 唯一值&#xff0c;供客户查询&#xff09; |-- 商店编号&#xff08;shop_id, 商店表自动编号&#xff09; |-- 订单状态 (order_status,未付款,已付款,已发货,已…...