生产者与消费者 PV操作 与 阻塞队列

文章目录

  • 普通方式 wait 与 notifyAll
    • 消费者
    • 生产者
    • 桌子
    • 测试类
    • 运行结果
  • 阻塞队列
    • Cook生产者
    • Customer消费者
    • 测试类


普通方式 wait 与 notifyAll

在这里插入图片描述

消费者

package abc;public class Customer extends Thread{@Overridepublic void run() {while (true) {synchronized (Desk.lock) {//判断顾客是否吃到上限数量了if (Desk.maxNum == 0) {break;} else {//桌子上有无食物if (Desk.foodNum > 0) {//修改桌子上食物数量Desk.foodNum--;//修改上限数量Desk.maxNum--;//有食物就吃System.out.println("吃饭中,还能吃  " + Desk.maxNum + "个");//吃完了告诉厨师继续Desk.lock.notifyAll();} else {//没有食物就等待try {System.out.println("顾客等待");Desk.lock.wait();} catch (InterruptedException e) {throw new RuntimeException(e);}}}}}}
}

生产者

package abc;public class Cook extends Thread {@Overridepublic void run() {while (true) {synchronized (Desk.lock) {//判断是否到达食物上限if (Desk.maxNum == 0) {break;} else {//没有到达上限,继续做食物//判断桌子上有无食物if (Desk.foodNum != 0) {//有食物,等待try {System.out.println("厨师等待");Desk.lock.wait();} catch (InterruptedException e) {throw new RuntimeException(e);}} else {//没有食物,去做食物System.out.println("厨师做食物");Desk.foodNum++;//提醒顾客去吃食物Desk.lock.notifyAll();}}}}}
}

桌子

package abc;public class Desk{//食物数量public static int foodNum=0;//总个数public static int maxNum=40;//锁对象public static Object lock=new Object();
}

测试类

package abc;public class Main {public static void main(String[] args) {Cook cook = new Cook();Customer customer = new Customer();cook.start();customer.start();}
}

运行结果

厨师做食物
厨师等待
吃饭中,还能吃  4个
顾客等待
厨师做食物
厨师等待
吃饭中,还能吃  3个
顾客等待
厨师做食物
厨师等待
吃饭中,还能吃  2个
顾客等待
厨师做食物
厨师等待
吃饭中,还能吃  1个
顾客等待
厨师做食物
厨师等待
吃饭中,还能吃  0

阻塞队列

在这里插入图片描述

Cook生产者

package zu_se;
import java.util.concurrent.ArrayBlockingQueue;public class Cook extends Thread ArrayBlockingQueue<String> queue;public Cook(ArrayBlockingQueue<String> queue) {this.queue = queue;}@Overridepublic void run() {while (true) {//开始做饭try {queue.put("食物");System.out.println("厨师做饭");} catch (InterruptedException e) {throw new RuntimeException(e);}}}
}

Customer消费者

package zu_se;
import java.util.concurrent.ArrayBlockingQueue;public class Customer extends Thread {ArrayBlockingQueue<String> queue;public Customer(ArrayBlockingQueue<String> queue) {this.queue = queue;}@Overridepublic void run() {while (true) {//开始做饭try {//从阻塞队列获取数据String food = queue.take();System.out.println("顾客吃" + "  " + food);} catch (InterruptedException e) {throw new RuntimeException(e);}}}
}

测试类

package zu_se;import java.util.concurrent.ArrayBlockingQueue;public class Main {public static void main(String[] args) {//创建阻塞队列//1.泛型是队列里面数据的属性, 2.必须要指定队列上限//传递队列给两个线程ArrayBlockingQueue<String> queue=new ArrayBlockingQueue<>(3);//传递阻塞队列Cook cook=new Cook(queue);Customer customer=new Customer(queue);cook.start();customer.start()}
}

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

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

相关文章

音频文件转文字怎么操作?3个方法手把手教你

音频文件转文字怎么操作&#xff1f;音频文件转文字&#xff0c;即将音频中的语音内容转换为可编辑和搜索的文本格式&#xff0c;是一项在多个场景中都非常实用的技术。无论是在会议记录、采访整理、学习笔记&#xff0c;还是视频字幕制作等场景中&#xff0c;音频转文字技术都…

吴恩达机器学习笔记:第 8 周-14降维(Dimensionality Reduction) 14.6-14.7

目录 第 8 周 14、 降维(Dimensionality Reduction)14.6 重建的压缩表示14.7 主成分分析法的应用建议 第 8 周 14、 降维(Dimensionality Reduction) 14.6 重建的压缩表示 在以前的视频中&#xff0c;我谈论 PCA 作为压缩算法。在那里你可能需要把 1000 维的数据压缩100 维特…

企业计算机服务器中了rmallox勒索病毒怎么处理,rmallox勒索病毒解密恢复

网络在为企业提供便利的同时&#xff0c;也为企业的数据安全带来严重威胁。随着网络技术的不断发展&#xff0c;越来越多的企业利用网络开展各项工作业务&#xff0c;网络数据安全问题&#xff0c;一直成为企业关心的主要话题&#xff0c;但网络威胁随着网络技术的不断成熟&…

nginx--反向代理

反向代理 指的是代理外网用户的请求到内部的指定web服务器器&#xff0c;并将数据返回给用户的一种方式&#xff0c;这是用的比较多的一种方式 模块和功能 ngx_http_proxy_module&#xff1a; 将客户端的请求以http协议转发至指定服务器进行处理。ngx_stream_proxy_module&…

CDGA|企业的不同阶段如何做数据治理?

随着数字化时代的到来&#xff0c;数据已经成为企业运营和决策的核心要素。因此&#xff0c;数据治理成为企业在不同阶段必须面对的重要课题。 本文将探讨企业在初创期、成长期、成熟期和转型期四个阶段应如何进行数据治理。 初创期&#xff1a;建立数据治理基础 在初创期&…

美的集团太子惨败五一档,一顿火锅解决不了什么事

杨幂于谦的组合&#xff0c;很新鲜。 联丰策略拥有一支由知名互联网公司和国内证券金融机构的行业专家组成的一流运营团队。凭借他们在互联网产品开发和金融风险管理方面的丰富经验,我们的团队致力于为客户提供专业和个性化的证券交易服务。 当初&#xff0c;由丁晟导演的电影…

CUDA CPP Unity Compute Shader

为学 开始一个新的学习计划&#xff0c;涵盖&#xff1a; 主题学习内容CUDAProfessional CUDA C Programming/NVIDIA CUDA初级教程视频(周斌)CCPrimer / The Cherno CPPUnity Compute ShaderUdemy Learn to Write Unity Compute ShadersLinear AlgebraMIT 18.06 Prof.Gilbert…

Aigtek射频功率放大器的主要功能是什么

射频功率放大器是一种专门用于放大射频信号功率的电子器件&#xff0c;它在无线通信、雷达系统、卫星通信等射频应用中起着至关重要的作用。下面将详细介绍射频功率放大器的主要功能。 信号放大&#xff1a;射频功率放大器的主要功能之一就是将传入的射频信号放大到所需的功率水…

Flask与HTTP

一、请求响应循环 “请求-响应循环”&#xff1a;客户端发出请求&#xff0c;服务器处理请求并返回响应。 Flask Web程序的工作流程&#xff1a; 当用户访问一个URL&#xff0c;浏览器便生成对应的HTTP请求&#xff0c;经由互联网发送到对应的Web服务器。Web服务器接收请求&a…

【计算机网络】FTP站点配置搭建教程以及相关问题解决方案(超详细)

文章目录 1、安装Window Server 20082、搭建FTP环境&#xff08;1&#xff09;安装FTP服务器&#xff08;2&#xff09;配置FTP服务器&#xff08;3&#xff09;测试FTP连接 3、遇到的问题以及解决方案&#xff08;1&#xff09;Windows无法访问此文件夹&#xff08;2&#xff…

上传文件到 linux

一、mac 法一&#xff1a;scp 先进入mac的 Node_exporter文件&#xff08;要上传的文件&#xff09;目录下 输入scp -P 端口号 文件名 rootIP:/存放路径 scp -P 22 node_exporter-1.8.0.linux-amd64.tar.gz root192.***.2:/root 法二、 rz mac 安装 lrzsz&#xff0c;然后…

dp 动态规划 力扣

64. 最小路径和 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 示例 1&#xff1a; 输入&#xff1a;grid [[1,3,1],[1,5,1],[4,2,1]] 输…

Python基础学习之logging模块

在Python编程中&#xff0c;日志记录&#xff08;Logging&#xff09;是一个非常重要的功能。它不仅可以帮助我们追踪和调试代码中的错误&#xff0c;还可以记录程序运行时的关键信息&#xff0c;以便后续分析和优化。Python标准库中的logging模块为我们提供了强大的日志记录功…

AI日报|gpt2-chatbot神秘聊天机器人引热议,疑似GPT-4.5?《金融时报》与OpenAI达成战略合作...

欢迎大家在 GitHub 上 Star 我们&#xff1a; 分布式全链路因果学习系统 OpenASCE: https://github.com/Open-All-Scale-Causal-Engine/OpenASCE 大模型驱动的知识图谱 OpenSPG: https://github.com/OpenSPG/openspg 大规模图学习系统 OpenAGL: https://github.com/TuGraph-…

踏准芯片定制风口的灿芯股份,护城河足够深吗?

近年来&#xff0c;芯片定制渐成风潮&#xff0c;不仅位于下游、自身有巨大芯片需求的科技巨头如谷歌、OpenAI等纷纷转向定制&#xff0c;而且产业中游主打标准化芯片的主流芯片设计公司如博通、英伟达等&#xff0c;也相继开辟或加码定制业务。 风潮背后&#xff0c;一方面是…

老人摔倒监测识别摄像机

随着社会老龄化程度的不断加深&#xff0c;老年人的健康和安全问题日益凸显。在家中独居的老人&#xff0c;一旦发生意外摔倒等情况&#xff0c;往往难以及时得到帮助&#xff0c;造成了严重的安全隐患。为了解决这一问题&#xff0c;近年来&#xff0c;老人摔倒监测识别摄像机…

AI大模型探索之路-训练篇7:大语言模型Transformer库之HuggingFace介绍

系列篇章&#x1f4a5; AI大模型探索之路-训练篇1&#xff1a;大语言模型微调基础认知 AI大模型探索之路-训练篇2&#xff1a;大语言模型预训练基础认知 AI大模型探索之路-训练篇3&#xff1a;大语言模型全景解读 AI大模型探索之路-训练篇4&#xff1a;大语言模型训练数据集概…

鸿蒙组件样式复用简介

鸿蒙组件样式复用简介 使用Style进行复用在Component内部复用在Component外部复用使用Extend复用指定类型组件Extend支持参数传递 使用Style进行复用 在页面开发过程中&#xff0c;会遇到多个组件都在使用相同的样式&#xff0c;这时候就要考虑是不是可以将相同的样式的进行复…

【深度优先搜索 图论 树】2872. 可以被 K 整除连通块的最大数目

本文涉及知识点 深度优先搜索 图论 树 图论知识汇总 LeetCode 2872. 可以被 K 整除连通块的最大数目 给你一棵 n 个节点的无向树&#xff0c;节点编号为 0 到 n - 1 。给你整数 n 和一个长度为 n - 1 的二维整数数组 edges &#xff0c;其中 edges[i] [ai, bi] 表示树中节点…

VMware 虚拟机打开一段时间后卡死,VNX进程CPU占比高

一、问题描述 打开虚拟机后可以正常运行 运行几分钟后突然卡死 然后通过任务管理器可以观察到VMware Workstation VMX应用进程的CPU占比高&#xff0c;CPU也出现异常 关闭虚拟机重新开启&#xff0c;还是一样卡死 二、系统环境 系统: Windows10 VMware: Workstation 17 Pro …