多线程生产者消费者问题

生产者消费者问题(多生产者多消费者多缓冲区)——Java多线程 题目要求: 提供三种场景供用户选择: 1、单生产者单消费者单缓冲区 2、多生产者多消费者单缓冲区 3、多生产者多消费者多缓冲区 用户可以自由选择三种场景,并输入可选择参数。 场景解析 1、单生产者单消费者单缓冲区:为一对一的情况,所需要考虑的仅有生产者和消费者对缓冲区的互斥操作。 2、多生产者多消费者单缓冲区:不仅要考虑生产者消费者之间的互斥,为了避免多个生产者生产的产品放到缓冲区中的同一个位置、多个消费者消费同一个产品,还要考虑生产者之间、消费者之间的互斥关系。 3、多生产者多消费者多缓冲区:与前. 阅读详情
  • 在缓冲区为空时,消费者不能再进行消费
  • 在缓冲区为满时,生产者不能再进行生产
  • 在一个线程进行生产或消费时,其余线程不能再进行生产或消费等操作,即保持线程间的同步
  • 注意条件变量与互斥锁的顺序

买家和卖家 生产者消费者

消费者去买 有商品的话 直接买 没有的话就需要等待wait

生产者生产完以后 唤醒等待中的消费者取商品 然后等待wait

package com.work.week01;
class Goods{ //消费者和生产者共同拥有的==>商品
    private String name;//商品名字
    private double price;//商品的价格
    private boolean isProduct;//商品是否需要生产
    //ture 需要生产    ,  false 不需要生产
    
    public Goods(String name, double price, boolean isProduct) {
        this.name = name;
        this.price = price;
        this.isProduct = isProduct;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }
    public boolean isProduct() {
        return isProduct;
    }
    public void setProduct(boolean product) {
        isProduct = product;
    }
}
class Customer implements Runnable{ //消费者线程
    private Goods goods;
    public Customer(Goods goods) {
        this.goods = goods;
    }
    public void run() {
        while (true){
            synchronized (goods){
                if (!goods.isProduct()){
                    System.out.println("消费者购买了" + goods.getName() +
                            "价格为:" + goods.getPrice());
                    goods.setProduct(true);
                    goods.notify();
                } else {
                    try {
                        goods.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}
class Productor implements Runnable{  //生产者线程
    private Goods goods;
    public Productor(Goods goods) {
        this.goods = goods;
    }
    public void run() {
        int count = 0;
        while (true){
            synchronized (goods){
                if (goods.isProduct()){
                    if (count %2 == 0) {
                        goods.setName("幻影");
                        goods.setPrice(9.9);
 //                       System.out.println();
                    }else{
                       goods.setName("粪叉");
                       goods.setPrice(10.0);
                    }
                    goods.setProduct(false);
                    System.out.println("生产者生产了:" + goods.getName()
                    + "价格为:" + goods.getPrice());
                    count++;
                    goods.notify();
                } else {
                    try {
                        goods.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}
public class Demo04 {
    public static void main(String[] args) {
        Goods goods = new Goods("玛莎拉蒂" , 9.9 ,
                false);
        Customer customer = new Customer(goods);
        Productor productor = new Productor(goods);
        new Thread(customer).start(); 
        new Thread(productor).start();
    }
} 

windows下多线程(生产者消费者问题:3个生产者,一个消费者,4个缓冲区) 原作者提供源码为两种情况: 第一种:1生产者1消费者1缓冲区 第二种:1生产者 2消费者 4缓冲区 ========================下面为修改作者源码得到的 3个生产者1个消费者4个缓冲区的情况==================  //1生产者 2消费者 4缓冲区 #include #include #include //设置控制台输出颜 阅读详情

相关推荐

c++多线程 (生产者消费者问题)

针对多线程中常见的生产者消费者问题,封装了一个类,和测试代码,方便日后直接套用。 具体来说就是多线程使用时候经常遇到的 一个线程取数据,一个处理数据,一个保存或传递数据。

何似莫相逢 6078

多线程的生产者和消费者问题

多线程的生产者和消费者问题是比较经典的多线程问题,如果知道编码解决生产者和消费者问题,那么对于多线程应该基本算掌握了。我不知道大家的生产者和消费者问题是怎么样的(应该有几个版本吧),这里我说下我的生产者和消费者问题: 有多个生产线程,他们只负责生产资源;有多个消费者,同样他们只负责消费。但是他们需要满足下面条件: 生产者:只有当资源没有的时候,生产者才开始生产,但是为了防止浪费,每次只能生产指定数量的资源。当生产者生产完足够资源时,就进入睡眠,同时叫醒消费者去消费;

YuZhiHui_No1的专栏 3390

c++多线程生产者与消费者问题代码

c++多线程生产者与消费者问题代码

rain_while的博客 6017

多线程之生产者与消费者问题

生产者消费者问题(Producer-consumer problem):生产者不断地生产产品,消费者取走生产者生产的产品。生产者生产出产品后将其放到一个区域之中,消费者从这个地方去除数据。 涉及的问题:要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据。 主要涉及:多线程的同步问题。 1、假设生产者线程刚向数据存储空间添加了产品的名称,还没有添加产品的内容,程序就切到了消费者的线程,消费这的 线程将吧产品的名称和上

Andyの笔记 2159

Java多线程--生产者与消费者问题

Java多线程--生产者与消费者问题

人生得意须尽欢 1970

无限维李代数局部与2-局部1/2-导子:从概念到Witt代数实例解析

在抽象代数与数学物理中,李代数是描述对称性的基本结构,而导子则是刻画其微分性质的核心算子。从经典的导子概念出发,通过引入“局部”与“分数阶”两个关键推广,形成了局部导子、2-局部导子以及1/2-导子等重要研究方向。这些推广不仅深化了对无限维李代数(如Witt代数、Virasoro代数)复杂结构的理解,其研究方法和结论也为共形场论、可积系统等物理理论提供了数学基础。本文聚焦于无限维李代数上局部与2-局部1/2-导子的系统研究,通过拆解核心概念、剖析典型代数结构,并以Witt代数为实例,详细演示了从全局1/2-

weixin_34072296的博客 391

多线程之消费者生产者问题

消费者生产者问题: 这个问题是一个多线程同步问题的经典案例,生产者负责生产对象,消费者负责将生成者产生的对象取出,两者不断重复此过程。这过程需要注意几个问题: 不论生产者和消费者有几个,必须保证: 1.生产者每次产出的对象必须不一样,产生的对象有且仅有出现一次; 2.消费者每次取出的对象必须不一样,取出的对象有且仅有出现一次; 3.一定是先产生该对象,然后对象才能被取出,顺序不能乱; ...

zjt980452483的博客 4554

3D视觉-激光三角测量法的概述和原理

激光三角法位移测量的原理是,用一束激光以某一角度聚焦在被测物体表面,然后从另一角度对物体表面上的激光光斑进行成像,物体表面激光照射点的位置高度不同,所接受散射或反射光线的角度也不同,用。激光三角测量法是一种通过图像采集系统采集被测物表面漫反射的激光轮廓,进而基于设备已知的相对位置通过算法处理,获得被测物表面的三维轮廓数据,进而还原目标物体三维空间信息的方法。采用激光三角原理和回波分析原理进行非接触位置、位移测量的精密传感器, 广泛应用于位置、位移 、厚度、半径、形状、振动、距离等几何量的工业测量。

qq_20660115的博客 3919

java多线程之生产者消费者经典问题

今天研究了一下java多线程,顺便写了一下多线程中的经典问题-----生产者消费者经典问题,参照了网上的各种写法之后自己写了一个,如下所示 /**生产者消费者问题,涉及到几个类 * 第一,这个问题本身就是一个类,即主类 * 第二,既然是生产者、消费者,那么生产者类和消费者类就是必须的 * 第三,生产什么,消费什么,所以物品类是必须的,这里是馒头类 * 第四,既然是线程,那么就不是一对

亡羊补牢 5万+

[RK3588从入门到精通] 专栏目录及介绍

[RK3588从入门到精通] 专栏目录及介绍

nb124667390的博客 6498

智能家居DIY:用51单片机实现三合一环境监测(温湿度+烟雾+自动灭火)

本文详细介绍了如何利用STC89C52单片机打造智能家居三合一环境监测系统,集成温湿度检测、烟雾报警和自动灭火功能。从硬件选型、电路设计到软件编程,提供完整的DIY方案,帮助读者构建高性价比的家庭安全防护系统,特别适合智能家居爱好者和电子DIY初学者。

yhn4567890的博客 690

多线程的生产者-消费者问题实现

这个实现使用了信号量和互斥锁来保证线程安全,避免竞态条件。生产者会持续向缓冲区添加项目,而消费者会持续从缓冲区取出项目,直到loops变量减到0。这是一个多线程的生产者-消费者问题实现。

XLYcmy的博客 1663

DaVinciCFG实战:从ARXML配置到ADC代码生成全解析

本文详细解析了使用DaVinciCFG工具进行ADC模块配置的全过程,从ARXML文件处理到代码生成与集成。重点介绍了关键参数配置、ARXML语法规则、常见错误排查及代码优化技巧,帮助开发者掌握AUTOSAR架构下ADC驱动开发,提升汽车电子系统的可靠性。

f9g0h的博客 378

Java多线程实现生产者消费者问题

Java多线程实现生产者消费者问题 问题描述: 假设在汉堡店中,有最多能放10个汉堡的窗口,有生产汉堡的厨师,还有前来消费汉堡的消费者。厨师在窗口没摆满汉堡时一直生产汉堡放到窗口,消费者在窗口有汉堡时能进行消费。 模型抽象: 生产者(厨师):新加产品到缓冲池,当缓冲池产品达到最大值(满了)时进入wait状态。 消费者:提取缓冲池中的产品,当缓冲池产品为空时进入wait状态等待 缓冲池(窗口):存放...

qq_41257358的博客 1700

STM32CubeIDE入坑指南

一 前言 在科技日新月异的今天,作为从事效率为先的苦逼 IT 行业,秉承着我不入地狱谁入地狱的伟大革命精神,我决定再一次做第一个吃螃蟹的人,通过自身的入坑过程,为大家测试STM32CubeIDE这款新式工具。(其实是为了我能省点时间,快点做完项目,多挣点钱买几瓶肾气丸) 二 看一看别人是如何入坑的 二 手把手带你入坑 三 相关资料 ...

CH的博客 1万+

YOLOv11 结合 BiFormer 注意力:打造多场景高精度检测模型实战教程

注册BiFormer模块(若代码未自动注册)# 加载自定义配置的YOLOv11模型。

know_F0727的博客 251

多线程同步中的生产者消费者问题

生产者消费者问题(Producer-consumer problem),也称有限缓冲问题(Bounded-buffer problem),它在多线程同步问题中是一个经典案例,那么什么是生产者-消费者问题?

m0_73537205的博客 1599

针对小缺陷目标:在YOLOv11中引入小目标检测层

摘要: 针对YOLOv11在工业检测中漏检微小目标(如焊点气泡)的问题,研究发现深层特征下采样导致小目标信息丢失。通过在YOLOv11中增加P2检测层(4倍下采样)并融合浅层高分辨率特征,可显著提升小目标召回率。关键优化包括:调整模型结构、谨慎设计数据增强策略(减少MixUp、增加小目标粘贴)、重新分配损失权重(提升P2层权重)、优化推理速度(动态分辨率、通道裁剪)。同时强调数据质量的重要性,建议根据具体场景特性(目标尺寸、分布)定制方案,而非盲目调整模型。

as1225120794的博客 366

Linux 系统应用编程——多线程经典问题(生产者-消费者)

“生产者——消费者”问题是Linux多线程编程中的经典问题,主要是利用信号量处理线程间的同步和互斥问题。          “生产者——消费者”问题描述如下:           有一个有限缓冲区(这里用有名管道实现 FIFO 式缓冲区)和两个线程:生产者和消费者,它们分别不停地把产品放入缓冲区中拿走产品。一个生产者在缓冲区满的时候必须等待,一个消费者在缓冲区空的时候也不IXUS等待。另外,因

知秋一叶 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

多线程八 生产者消费者经典问题

继经典线程同步问题之后,我们来看看生产者消费者问题及读者写者问题。生产者消费者问题是一个著名的线程同步问题,该问题描述如下:有一个生产者在生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和消费者能并发执行,在两者之间设置一个具有多个缓冲区的缓冲池,生产者将它生产的产品放入一个缓冲区中,消费者可以从缓冲区中取走产品进行消费,显然生产者和消费者之间必须保持同步,即不允许消费者到一个空的缓冲区

dazhong159的专栏 4472

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

(C++) 多线程之生产者消费者问题

生产者消费者问题_百度百科 (baidu.com)生产者消费者问题 (英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例。该问题描述了两个共享固定大小缓冲区的线程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。 condition_variable thread mutex lock_guard unique_lock wait

cuber-lotus的博客 2708

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

python多线程问题及生产者消费者示例

多线程能干什么: 生产者消费者问题:(经典) 一直生产 一直消费 中间有阀值 避免供求关系不平衡 #线程安全问题,要是线程同时来,听谁的 #锁:一种数据结构 队列:先进线出 栈:先进后出 #生产者消费者的优点(为什么经典的设计模式) 1.解耦(让程序各模块之间的关联性降到最低) 假设生产者和消费者是两个类,如果让生产者直接调用消费者的某个方法, 那么生产者对于消费者就会产生依赖(也就是耦...

Logbook的博客 3809

java多线程生产者消费者问题_Java多线程实现生产者消费者延伸问题

在操作系统中有一类问题被称为生产者消费者问题:意为,有数个生产者生产产品,有数个消费者消费产品,他们共享一定数量的缓存。这里用java多线程编程,实现生产者消费者问题的一种延伸,橘子苹果问题。题目如下:有苹果橘子生产者各20个,有苹果橘子消费者各20个,他们公用20个缓存区。要求能随时查看缓存区内容,随时查看生产消费内容情况,随时暂停生产开始生产。我们的实现思路:1.首先创建一个缓存区类,其中包含...

weixin_31887861的博客 207

生产者消费者问题-代码详解(Java多线程)

文章目录一、生产者消费者问题二、代码实现三、拓展知识 一、生产者消费者问题 生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例。 该问题描述了两个共享固定大小缓冲区的线程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。 生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲

末尾卡片和博主交流学习! 1万+

java多线程生产者消费者问题_java多线程解决生产者消费者问题

/** 生产者和消费者案例*/public class TestProductorAndConsumer {public static void main(String[] args) {Clerk clerk = new Clerk();Productor pro = new Productor(clerk);Consumer cus = new Consumer(clerk);new Thre...

weixin_32148861的博客 250
上一篇: 进程和线程
下一篇: 反射及通过发射获取方法和属性
Java_dacainiao
博客等级 码龄4年 1粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值