Java 线程通信模型小案例

Java 线程通信模型小案例

在这里插入图片描述

package com.zhong.thread.usethread;import java.util.ArrayList;
import java.util.List;/*** @ClassName : CookAndFood* @Description : 锁的应用厨师和包子问题* @Author : zhx* @Date: 2024-02-19 15:43*/
public class CookAndFood {public static void main(String[] args) {Desk desk = new Desk();new Thread(() -> {while (true) {desk.put();}}, "厨师1").start();new Thread(() -> {while (true) {desk.put();}}, "厨师2").start();new Thread(() -> {while (true) {desk.put();}}, "厨师3").start();new Thread(() -> {while (true) {desk.get();}}, "顾客1").start();new Thread(() -> {while (true) {desk.get();}}, "顾客2").start();}
}/*** 类名称:$CLASSNAME$* 描述:桌子 存放包子* 创建人: zhong* 创建时间: 2024/02/19*/class Desk extends Thread {private List<String> desk = new ArrayList<>();public synchronized void put() {try {String name = Thread.currentThread().getName();if (desk.isEmpty()) {desk.add(name + "做得的包子");System.out.println(name + "做了一个包子");Thread.sleep(2000);// 唤醒别人 等待自己 注意顺序this.notifyAll();this.wait();} else {// 唤醒别人 等待自己 注意顺序// 有包子 尝试唤醒消费者this.notifyAll();this.wait();}} catch (InterruptedException e) {throw new RuntimeException(e);}}public synchronized void get() {try {String name = Thread.currentThread().getName();if (desk.size() == 1) {System.out.println(name + " 吃了包子 " + desk.get(0));// 清空集合 吃包子desk.clear();Thread.sleep(1000);this.notifyAll();this.wait();} else {this.notifyAll();this.wait();}} catch (Exception e) {throw new RuntimeException(e);}}
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/478006.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一分钟学会如何查看Python内置函数的用法及其源码

在用Python进行各种分析的时候&#xff0c;我们会用到各种各样的函数&#xff0c;比如&#xff0c;我们用SQL时&#xff0c;经常使用join、max等各种函数&#xff0c;那么想看Python是否有这个函数&#xff0c;这个时候可能大部分人会百度&#xff0c;那么如何不使用百度&#…

【设计模式】4、策略模式

文章目录 一、问题二、解决方案2.1 真实世界的类比2.2 策略模式结构2.3 适用场景2.4 实现方式2.5 优缺点2.6 与其他模式的关系 三、示例代码3.1 go3.2 rust3.2.1 通过 trait 实现3.2.2 function closure 策略模式是一种行为设计模式&#xff0c;它能定义一系列算法&#xff0c…

第五次作业:LMDeploy 的量化和部署

参考文档&#xff1a;https://github.com/InternLM/tutorial/blob/main/lmdeploy/lmdeploy.md 基础作业&#xff1a; 使用 LMDeploy 以本地对话、网页Gradio、API服务中的一种方式部署 InternLM-Chat-7B 模型&#xff0c;生成 300 字的小故事&#xff08;需截图&#xff09; …

上网行为监控软件能够看到聊天内容吗

随着网络技术的迅猛发展和广泛应用&#xff0c;上网行为监控软件逐渐成为许多企业和组织维护网络安全、提高工作效率的重要工具。这些软件可以实时监控和记录员工的网络活动&#xff0c;包括访问的网站、下载的文件、使用的应用程序等。 然而&#xff0c;一个常见的问题是&…

计算机网络体系结构和参考模型

目录 1、分层结构 2、协议、接口、服务 3、7层OSI模型 4、4层TCP/IP模型 5、5层参考模型 1、分层结构 1.1、为什么需要分层结构&#xff1f; 在网络上传输数据前需要完成一些功能&#xff1a; 1)、发起通信的计算机需要将数据通信的通路进行激活 2)、要告诉网络如何识别…

基于SpringBoot+Dubbo构建的电商平台-微服务架构、商城、电商、微服务、高并发、kafka、Elasticsearc+源代码+文档说明

文章目录 项目用到的技术前端使用的技术后端使用的技术项目模块说明项目搭建方式项目开发进度源码下载地址 项目基于springboot2.1.6.RELEASEDubbo2.7.3 来构建微服务。 业务模块划分&#xff0c;尽量贴合互联网公司的架构体系。所以&#xff0c;除了业务本身的复杂度不是很高之…

MySQL数据库基础(十):DQL数据查询语言

文章目录 DQL数据查询语言 一、数据集准备 二、select查询 三、简单查询 四、条件查询 1、比较查询 2、范围查询 3、逻辑查询 4、模糊查询 5、非空查询 五、排序查询 六、聚合查询 七、分组查询与having子句 1、分组查询介绍 2、group by的使用 3、group by 聚…

linux搭建测试环境详细过程

前言 本文记录下&#xff0c;测试人员如何搭建测试环境&#xff0c;以供后面自己方便找&#xff0c;大家可以借鉴下搭建测试环境需要安装的有&#xff1a;nginx&#xff0c;redis&#xff0c;mysql&#xff0c;java&#xff0c;docker&#xff0c;保证这几个基本就可以用了&…

AMD FPGA设计优化宝典笔记(5)低频全局复位与高扇出

亚军老师的这本书《AMD FPGA设计优化宝典》&#xff0c;他主要讲了两个东西&#xff1a; 第一个东西是代码的良好风格&#xff1b; 第二个是设计收敛等的本质。 这个书的结构是一个总论&#xff0c;加上另外的9个优化&#xff0c;包含的有&#xff1a;时钟网络、组合逻辑、触发…

leetcode hot100 拆分整数

在本题目中&#xff0c;我们需要拆分一个整数n&#xff0c;让其拆分的整数积最大。因为每拆分一次都和之前上一次拆分有关系&#xff0c;比如拆分6可以拆成2x4&#xff0c;还可以拆成2x2x2&#xff0c;那么我们可以采用动态规划来做。 首先确定dp数组的含义&#xff0c;这里dp…

容器库(7)-std::map

std::map是一种有序关联容器&#xff0c;它包含具有唯一键的键值对。搜索、移除和插入的时间复杂度是 。底层通常是以红黑树实现的。 template<class Key,class T,class Compare std::less<Key>,class Allocator std::allocator<std::pair<const Key, T>&…

Gitlab CI/CD docker命令报错:/usr/bin/bash: line 136: docker:command not found

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…