【java学习—十五】经典例题:生产者/消费者问题(7)

news2024/12/30 0:54:59

文章目录

  • 1. 题目
  • 2. 答案


1. 题目

    生产者 (Productor) 将产品交给店员 (Clerk) ,而消费者 (Customer)从店员处取走产品,店员一次只能持有固定数量的产品 ( 比如 4 ),如果生产者试图生产更多的产品,店员会叫生产者停一下,如果店中有空位放产品了再通知生产者继续生产;如果店中没有产品了,店员会告诉消费者等一下,如果店中有产品了再通知消费者来取走产品。

这里可能出现两个问题:
    生产者比消费者快时,消费者会漏掉一些数据没有取到。
    消费者比生产者快时,消费者会取相同的数据。

2. 答案

package day15;

/**
 * 生产者与消费者
 * @author 14532
 *
 */
public class Test3 {
	public static void main(String[] args) {
		Clerk c = new Clerk();
		//消费时不生产,生产时不消费
		
		//生产者
		new Thread(new Runnable() {
			@Override
			public void run() {
				synchronized (c) {
					while(true) {//无限循环代表无限的生产次数
						if(c.productNum == 0) {//产品数为0,开始生产
							System.out.println("产品数为0,开始生产");
							while(c.productNum < 4) {
								c.productNum++;//增加产品
								System.out.println("库存:" + c.productNum);
							}
							System.out.println("产品数为:" + c.productNum + ",结束生产");
							
							c.notify();//唤醒消费者线程
						}else {
							try {
								c.wait();//生产者线程等待
							} catch (InterruptedException e) {
								e.printStackTrace();
							}
							
						}
						
					}
					
				}
				
			}
		}, "生产者").start();
		
		//消费者
		new Thread(new Runnable() {
			@Override
			public void run() {
				synchronized (c) {
					while(true) {//无限循环代表无限的消费次数
						if(c.productNum == 4) {//产品数为4,开始消费
							System.out.println("产品数为4,开始消费");
							while(c.productNum > 0) {
								c.productNum--;//消费产品
								System.out.println("库存:" + c.productNum);
							}
							System.out.println("产品数为:" + c.productNum + ",结束消费");
							
							c.notify();//唤醒生产者线程
						}else {
							try {
								c.wait();//消费者线程等待
							} catch (InterruptedException e) {
								e.printStackTrace();
							}
							
						}
						
					}
					
				}
				
			}
		}, "消费者").start();
		
	}
}

class Clerk{
	public static int productNum = 0;
}

运行结果:

在这里插入图片描述

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

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

相关文章

2023年腾讯云服务器限时特惠,2023年腾讯云服务器最新优惠汇总

亲爱的朋友们&#xff0c;如果你正在考虑购买腾讯云服务器&#xff0c;那么你一定需要了解近期腾讯云服务器的限时特惠活动。本文将为你提供2023年腾讯云服务器的最新优惠汇总&#xff0c;并详细介绍几款值得购买的优惠云服务器。 首先为大家介绍的是轻量2核2G3M服务器&#x…

【Python入门五】第三方库(包)介绍

Python第三方库/包介绍 前言安装方法 2 数据分析和处理netCDF4numpyxarray 3参考 前言 Python 的库分为2类。 标准库&#xff1a;不需要安装&#xff0c;需要导入。第三库&#xff1a;需要安装、需要导入。 Python的标准库中提供了许多有用的模块和功能&#xff0c;如字符串…

千梦网创:实现自动化“挂机躺盈”的三种方法

在互联网众多行业中&#xff0c;有很多人一直在寻找所谓的“挂机躺盈”的项目&#xff0c;在理财领域这种收入被称为“被动收入”。 天上不会掉馅饼这是一句讲烂掉的话了&#xff0c;躺在家里吃白食等着钱进账是一件不可能的事情。 然而如果你看到身边有“被动收入”的例子&a…

【深度学习】pytorch快速得到mobilenet_v2 pth 和onnx

在linux执行这个程序&#xff1a; import torch import torch.onnx from torchvision import transforms, models from PIL import Image import os# Load MobileNetV2 model model models.mobilenet_v2(pretrainedTrue) model.eval()# Download an example image from the P…

牛客——OR36 链表的回文结构(C语言,配图,快慢指针)

本题是没有对C的支持的&#xff0c;但因为Cpp支持C&#xff0c;所以这里就用C写了&#xff0c;可以面向更多用户 链表的回文结构_牛客题霸_牛客网 (nowcoder.com) 思路一&#xff1a;链表翻转 简单的想想整形我们怎么比较&#xff0c;就是将整形A 依次取尾&#xff0c;放到整形…

C语言之深入指针(三)(详细教程)

C语言之深入指针 在学习这篇博客之前建议先看看这篇博客C语言之深入指针&#xff08;二&#xff09; 里面详细介绍了指针的 传值调用和传址调用数组名的理解使用指针访问数组⼀维数组传参的本质 文章目录 C语言之深入指针1 二级指针1.1 二级指针的介绍1.2 二级指针的使用 2 指…

Redis持久化策略之RDB与AOF

文章目录 1.RDB1)基本介绍2)自动触发3)手动触发4)RDB文件5)优点缺点 2.AOF1)基本介绍2)使用方式3)工作流程4)重写机制5)AOF文件6)优点缺点 3.RDB AOF 我们都知道&#xff0c;redis 是一个基于内存的数据库。基于内存的好处是访问速度快&#xff0c;缺点是“不持久”——当数据…

响应数据web

get请求 package com.example.demo.controller.poio;import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;import java.util.*;//字符串格式返回 RestController public class ResponseBody {Req…

使用FFmpeg合并多个ts视频文件转为mp4格式

前言 爬取完视频发现都是ts文件&#xff0c;而且都是几百KB的视频片段&#xff0c;.ts 全名叫&#xff1a;MPEG Transport Stream&#xff0c;它是一个万能的多媒体容器&#xff0c;可以装下音频、视频、字幕。有时我们需要将.ts文件转换为其他更加广泛被支持的格式&#xff0…

基于Vue+SpringBoot的海南旅游景点推荐系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户端2.2 管理员端 三、系统展示四、核心代码4.1 随机景点推荐4.2 景点评价4.3 协同推荐算法4.4 网站登录4.5 查询景点美食 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的海南旅游推荐系统&#xff…

pytorch单精度、半精度、混合精度、单卡、多卡(DP / DDP)、FSDP、DeepSpeed模型训练

pytorch单精度、半精度、混合精度、单卡、多卡&#xff08;DP / DDP&#xff09;、FSDP、DeepSpeed&#xff08;环境没搞起来&#xff09;模型训练代码&#xff0c;并对比不同方法的训练速度以及GPU内存的使用 代码&#xff1a;pytorch_model_train FairScale&#xff08;你真…

前端调取摄像头并实现拍照功能

前言 最近接到的一个需求十分有意思&#xff0c;设计整体实现了前端仿 微信扫一扫 的功能。整理了一下思路&#xff0c;做一个分享。 tips: 如果想要实现完整扫一扫的功能&#xff0c;你需要掌握一些前置知识&#xff0c;这次我们先讲如何实现拍照并且保存的功能。 一. windo…

Diffusion Models CLIP

Introduction to Diffusion Models 生成模型 主要指的是无监督学习中的生成模型&#xff0c;在无监督学习中的主要任务是让机器学习给定的样本&#xff0c;然后生成一些新的东西出来。比如&#xff1a;给机器看一些图片&#xff0c;能够生成一些新的图片出来&#xff0c;给机器…

element el-date-picker报错Prop being mutated:“placement“快速解决方式

报错信息 Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop’s value. Prop being mutated: “placement” 报错版本 element-ui 2.15.6 和 2.15…

干扰项目成本估算精准度的5大因素

干扰项目成本估算精准度的因素有很多&#xff0c;这些因素可能导致成本估算的不准确性&#xff0c;增加成本偏差和额外的成本投入&#xff0c;从而对项目的进度和预算产生影响。因此&#xff0c;在进行项目成本估算时&#xff0c;需要充分考虑这些因素&#xff0c;并采取相应的…

NFS共享

目录 三种存储类型 作用&#xff1a; FTP文本传输协议 原理 FTP服务状态码 用户认证 常见FTP相关软件 vsftpd 软件介绍 用户和其共享目录 基础操作 安装服务端 客户端连接服务端 登录成功 匿名用户登录 1.服务端配置 2.客户端配置 3.服务端查看 匿名用户下载 删除…

Taro.navigateTo 使用URL传参数和目标页面参数获取

文章目录 1. Taro.navigateTo 简介2. 通过 URL 传递参数3. 目标页面参数获取4. 拓展与分析4.1 拓展4.2 URL参数的类型4.3 页面间通信 5. 总结 &#x1f389;欢迎来到Java学习路线专栏~Taro.navigateTo 使用URL传参数和目标页面参数获取 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x…

共聚焦显微镜的应用特点

共聚焦显微镜具有高分辨率和高灵敏度的特点&#xff0c;适用于多种不同样品的成像和分析&#xff0c;能够产生结果和图像清晰&#xff0c;易于分析。这些特性使共聚焦显微镜成为现代科学研究中不可或缺的重要工具&#xff0c;同时为人们解析微观世界提供了一种强大的手段。 作…

python递归求数字各个位数相加_和

python递归求数字的各项和&#xff0c;例如数字一千零二十四&#xff1a;“1024”&#xff0c;输出结果为“10247” 第一种方法&#xff1a; def sum(a): #求一个数字各项和&#xff0c;第一种递归方法if 0<a<9: #从前到最后一个&#xff0c;出循环…

无重复最长字符串(最长无重复子字符串),剑指offer,力扣

目录 原题&#xff1a; 力扣地址&#xff1a; 我们直接看题解吧&#xff1a; 解题方法&#xff1a; 难度分析&#xff1a; 难度算中下吧&#xff0c;这个总体不算很难&#xff0c;而且滑动窗口&#xff0c;以及哈希都比较常见 审题目事例提示&#xff1a; 解题思路&#xff08;…