Java多线程实现简单生产者消费者模式

Java线程间的通信----生产者消费者模型 利用线程间的通信主要是因为当多个线程同时对一个对象进行访问的时候,多个线程之间是一个协助的关系,举个例子就是今天要说的生产这和消费者模型。 立即下载
生产者消费者模式

一种重要的模式,基于等待/通知机制。生产者/消费者模式描述的是有一块缓冲区作为仓库,生产者可将产品放入仓库,消费者可以从仓库中取出产品,生产者/消费者模式关注的是以下几个点:

1、生产者生产的时候消费者不能消费

2、消费者消费的时候生产者不能生产

3、缓冲区空时消费者不能消费

4、缓冲区满时生产者不能生产

代码实例:

public class LockPattern_A {
	static int food=10;//设定开始食物储量
	Lock lock;
	Condition condition;
	public LockPattern_A(Lock lock,Condition condition) {
		// TODO Auto-generated constructor stub
		this.condition=condition;
		this.lock=lock;
	}
	/*生产者*/
	public void producer() {
		try {
				while(food>0) {
						lock.lock();
						/*当食物储量超过30时就唤醒消费者线程,进行消费*/
						if (food>30) {
							System.out.println("过剩,需要消费");
							condition.await();
						}
						System.out.println("食物不够,增加食物");
						System.out.println("当前食物储量"+food);
						food+=10;//生产者每次增加10个食物
						condition.signal();
				}
		} catch (InterruptedException e) {
				e.printStackTrace();
		} finally {
			lock.unlock();
		}
	}
	/*消费者*/
	public void consume() {
		try {
				while(food>=5) {
				
						lock.lock();
						/*当食物少于5个时就唤醒生产者线程进行生产*/
						if (food<=5) {
							System.out.println("食物不够,需要生产");
							condition.await();
						}
						System.out.println("消费食物");
						System.out.println("当前食物储量"+food);
						food-=5;//每次消费5个食物
						condition.signal();
						
				}
						
		} catch (InterruptedException e) {
				e.printStackTrace();
 		} finally {
 				lock.unlock();
		}
	
	}
	public static void main(String[] args) {
			Lock lock = new ReentrantLock();
			Condition condition = lock.newCondition();
			final LockPattern_A a = new LockPattern_A(lock, condition);
			/*生产者线程*/
			Thread t1 = new Thread(new Runnable() {
				
				@Override
				public void run() {
					// TODO Auto-generated method stub
					a.producer();
				}
			});
			/*消费者线程*/
			Thread t2 = new Thread(new Runnable() {
				
				@Override
				public void run() {
					// TODO Auto-generated method stub
						a.consume();
				}
			});
			
			t1.start();
			t2.start();
	}
}


temu登录接口逆向分析(含Py纯算) 【代码】temu登录接口逆向分析(含Py纯算) 阅读详情

相关推荐

CDR学习笔记——02

这篇写一些高级CDR的架构原理。

... 1020

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

一个简单的多线程问题,当处理逻辑不完善时,容易出现所有线程都在等待的死锁情况.我在一开始写的时候,使用的是notify()方法,这会导致每次只唤醒一条线程,但如果之前出现了消费者或生产者的连续抢到cpu控制权情况,之前沉睡的线程就并不止有一条,最终导致全部等待的死锁情况.贴两张运行结果直观一点。

qq_55630615的博客 1055

Flocking for Multi-Agent Dynamic Systems: Algorithms and Theory的理论简述和python仿真实现(附源码)

经典论文Flocking for Multi-Agent Dynamic Systems: Algorithms and Theory的学习与编程仿真,提供源码

m0_59701926的博客 1239

java多线程编程(三)----生产者消费者模型

front说明队列为空。放入元素的时候先判满,满了不能放,然后tail位置上放入元素,让tail走到下一个位置。比如第一次0号下标放入“hello”注意一定不能写tail++,队列元素已满的时候,再次++会越界,加1取模会让tail在次回到头节点,从而循环起来。同理删除元素也让头节点++。注意也不能直接++,必须取模,其条件为 front = (front + 1) % length;有了前置知识,那么我们首先实现一个循环队列。

weixin_65846395的博客 1389

OpenHarmony 5.1 RK3568 开发板烧录:从源码编译到镜像写入的 6 步实战

本文详细解析了OpenHarmony 5.1在RK3568开发板上的全链路开发流程,包括环境搭建、源码编译、镜像烧录等6个关键步骤。通过实战指南和避坑技巧,帮助开发者快速掌握OpenHarmony系统的烧录与定制能力,提升物联网设备开发效率。

weixin_33722405的博客 343

【大模型】MHA,MQA,GQA及KV Cache详解

在自回归模型中(Autoregressive Models),模型会逐个生成文本的每个token,这个过程可能比较慢,因为模型一次只能生成一个token,而且每次新的预测都依赖于之前的上下文。这意味着,要预测第1000个token,你需要用到前999个token的信息,这通常涉及到对这些token的表示进行一系列矩阵乘法运算。而要预测第1001个token,你不仅需要前999个token的信息,还要加上第1000个token的信息。

酒酿小圆子呀~ 2616

Java实现简易生产者消费者模型

生产者消费者模型是一种多线程设计模式,用于解决生产者线程和消费者线程之间的协调问题。在生产者消费者模型中,生产者线程生成数据并将其加入队列,而消费者线程从队列中获取数据并进行消费。在生产者和消费者之间存在一个共享的缓冲区,它作为生产者和消费者之间的中间存储点,用于协调生产者和消费者的工作。当生产者线程生成的数据太多时,它将被阻塞,直到消费者线程消费了一些数据,使队列不再满。当队列不满时,生产者线程才开始生产数据。反之,当队列为空时,消费者线程将阻塞,直到生产者线程生成了数据,消费者线程执行消费。

nothing8727的博客 472

MSTAR数据集下载地址及处理方法

首先感谢博主冯子材提供下载的百度网盘地址。 在这里为了防止侵权,特此鸣谢,并给出其博客地址。 地址中有MSTAR百度网盘下载地址和需要使用的数据介绍,其中百度网盘中有数据转换工具 https://blog.youkuaiyun.com/taifengzikai/article/details/80600355 工具使用 因为下载得到的数据是二进制文件,需要使用官方提供的工具进行转换,可将其转换为jpeg。 有...

KamenRider 1万+

java多线程并发 : 生产者-消费者模型的三种实现方式

生产者生产数据到缓冲区中,消费者从缓冲区中取数据。 如果缓冲区已经满了,则生产者线程阻塞; 如果缓冲区为空,那么消费者线程阻塞。 方式一:synchronized、wait和notify package day4; //wait 和 notify public class ProducerConsumerWithWaitNofity { public static void main(String[] args) { Resource resource = new Resource

火星男孩的分享空间 3160

6、业务影响分析(BIA)的数据收集与关键指标评估

本文全面解析了业务影响分析(BIA)的核心内容,包括数据收集、业务流程分析、信息系统与资产清单、人员与供应商依赖、影响声明、关键指标评估(如MTD、RTO、RPO)、威胁建模与风险分析等。通过详细的介绍和图表展示,帮助组织系统性地制定灾难恢复计划,以应对各种潜在风险,确保关键业务流程在灾难发生后能够快速恢复并持续运营。

moss5的博客 376

C#实现将DataGridView中数据导出到Excel (附完整源码)

C#实现将DataGridView中数据导出到Excel (附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1589

重温生产者、消费者模式

目录 1、确定生产者和消费者的模型 2、4种生产和消费情况 3、新建仓库类,例如StoreHouse 4、新建生产者线程,例如ProduceThread 5、新建消费者线程ConsumerThread 6、完善仓库类对象,在仓库类中创建用于生产产品的create方法,用于消费的delete方法 7、测试类 8、结果展示 9、整体代码 9.1 StoreHouse.java 仓库类 9.2 ProduceThread.java 生产者线程 ...

weixin_37910098的博客 215

基于STM32、HAL库的WF162A 11BA T&R气压传感器 驱动程序设计

/ 转换为7位地址。* @param temperature: 存储读取到的温度值(°C)* @param temperature: 存储读取到的温度值(°C)* @param pressure: 存储读取到的压力值(bar)* @param pressure: 存储读取到的压力值(bar)* @param range: 压力范围(bar)

corlin6688的博客 363

JAVA多线程实现简单的一对一生产者消费者模式(三种方法)

通过对JAVA多线程的学习,自己手写了三种方式,实现简单的一对一生产者消费者模式,每个案例中都有一个消费者线程,一个生产者线程和一个存储产品的类。具体如下。 PS:目前只实现了三种方法,如果有更多的,十分欢迎大家补充,一起交流。 1 采用wait()和notify()的结合方法 wait()和notify()需要结合sychronized使用,wait()负责释放锁,挂起线程,等待其他线程notify()方法唤醒该挂起的线程。具体代码如下: package com.blog.Thread1; /** *

qq_24406773的博客 981

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java实现生产者和消费者

本篇博文主要介绍如何使用java来实现简单的生产者和消费者 来帮助大家简单的入门理解生产者和消费者模式 一、对生产者消费者的理解 生产者消费者模式是并发、多线程编程中经典的设计模式。 简单来看,就是一个类负责生产,一个类负责消费。举例来说,一个变量,生产者不断增加这个变量,消费者不断减少这个变量。在互联网应用中,抢票机制就是应用了该模式,比如大麦网演唱会门票抢票,12306火车票抢票等。

fallwind_of_july的博客 1万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

用BlockingQueue实现一个简单的生产者-消费者模型

先上代码: package kevin; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurren

KevinJom的专栏 5341

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

java生产者消费者模式代码示例

package test; import java.util.LinkedList; public class Test { public static void main(String[] args) { R r = new R(); P p1 = new P(r,10); P p2 = new P(r,20); P p3 = new P(r,30); P p4

AI开源工具分享 1188

多线程 ---> 生产者和消费者1

生产者 和 消费者 --------------------------- 1/ 生产者: 2/ 消费者: ---------------------------- Object ===>>>> notify() 唤醒该线程 waitwait() 等待 --------

堕落者的博客 253

多线程之生产者消费者基本实现——wait/notify

生产者消费者问题是在面试过程中被面试官问到的最多的线程方面的问题,所以在这里发一个生产者消费者的最简单的实现方式

【陈年风楼】的博客 658

Java基础-生产者和消费者模式基础学习

生产者和消费者基础学习 生产者消费者模式概述: 生产者消费模式是一个十分经典的多线程协作的模式,弄懂生产者消费者问题能够让我们对多线程编程模式的理解更加深刻。 所谓的生产者和消费者问题,实际上主要包含了两类线程: 一类是生产者线程用于生产数据 一类是消费者线程用于消费数据 为了解耦生产者和消费者的关系,通常会采用共享的数据区域,就像一个仓库 生产者生产出数据之后直接放置在共享数据区中,并不需要关心消费者的行为 消费者只需要从共享数据区中去获取数据,并不需要关心生产者的

二丫的博客 183

Java中,生产者和消费者的问题

一,问题:生产者将生产出来的产品放入仓库中(仓库的容量为10),而消费者从仓库中取走产品(当仓库的产品数量为0时,不能取产品).使用多线程方法解答.以下是我写的解法:有四个文件组成.Cangku.javapackage com.procom.java;public class Cangku { public synchronized void addProduct() //生产者 {

wodedipang_的博客 595

Java多线程编程中生产者-消费者模式的详解

生产者-消费者模式是一个经典的多线程设计模式,它为多线程的协作提供了良好的解决方案。在生产者-消费者模式中,通常有两类线程,即若干个生产者线程和若干个消费者线程。生产者线程负责提交用户请求,消费者线程负责处理用户请求。生产者和消费者之间通过共享内存缓冲区进行通信。 生产者-消费者模式中的内存缓冲区的主要功能是数据在多线程间的共享。此外,通过该缓冲区,可以缓解生产者和消费者之间的性能差。

java的平凡之路 533

Java面试题(十四) 传统版生产者消费者模式

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

w_x_A__l__l的博客 336

多线程练习:使用生产者消费者模式模拟对话

题目:使用生产者消费者模式模拟对话 需求: 一个线程:你是谁呀? 一个线程:我是查水表的! 解题代码: //生产者,负责生产信息 class Producer implements Runnable{ //生产数据 Demo3 mid = null; private boolean flag =false; public Producer(Demo3 movie) { this.mid = movie; } public Pr

我们不创造代码 262

生产者和消费者

生产者和消费者模式概述 生产者消费者模式是一个十分经典的多线程协作的模式。 生产者消费者问题,主要包含了两类线程: 1.生产者线程用于生产数据 2.消费者线程用于获取数据 为了解耦生产者和消费者之间的关系,通常会采用共享的数据区域,就像一个仓库 生产者生产数据之后放到共享数据区域,并不需要关心消费者的行为; 消费者只需要从共享数据中获取数据,并不用关系生产者的行为。 生产者和消费者中的等待唤醒 当生产者线程在共享数据区域生产数据之后,需要去唤醒等待中的消费者线程获取数据。 当消费者

qq_42675444的博客 280

Java多线程---生产者消费者练习题

指尖上的Java 2017-01-09 21:39 主页菌又来喽,今天呢,主页菌分享一道关于多线程-生产者消费者的练习题! 代码: 生产者: 1 1 消费者: 2 资源: 3 3 测试代码: 4 今天的分享就到这里了,我们明天同一时间再见! 本文为头条号作者发布,不代表今日头条立场。

u011277123的博客 858
上一篇: Java FileChannel读写文件例子
下一篇: Java设计模式之建造者模式
Coder_py
博客等级 码龄10年 106粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值