Java生产者和消费者例子_动力节点Java学院整理
发布时间 - 2026-01-11 01:16:04 点击率:次生产者-消费者(producer-consumer)问题,也称作有界缓冲区(bounded-buffer)问题,两个进程共享一个公共的固定大小的缓冲区。其中一个是生产者,用于将消息放入缓冲区;另外一个是消费者,用于从缓冲区中取出消息。问题出现在当缓冲区已经满了,而此时生产者还想向其中放入一个新的数据项的情形,其解决方法是让生产者此时进行休眠,等待消费者从缓冲区中取走了一个或者多个数据后再去唤醒它。同样地,当缓冲区已经空了,而消费者还想去取消息,此时也可以让消费者进行休眠,等待生产者放入一个或者多个数据时再唤醒它。

一,首先定义公共资源类,其中的变量number是保存的公共数据。
并且定义两个方法,增加number的值和减少number的值。由于多线程的原因,必须加上synchronized关键字,注意while判断的条件。
Java代码
二,分别定义生产
/**
* 公共资源类
*/
public class PublicResource {
private int number = 0;
/**
* 增加公共资源
*/
public synchronized void increace() {
while (number != 0) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
number++;
System.out.println(number);
notify();
}
/**
* 减少公共资源
*/
public synchronized void decreace() {
while (number == 0) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
number--;
System.out.println(number);
notify();
}
}
者线程和消费者线程,并模拟多次生产和消费,即增加和减少公共资源的number值
Java代码
/**
* 生产者线程,负责生产公共资源
*/
public class ProducerThread implements Runnable {
private PublicResource resource;
public ProducerThread(PublicResource resource) {
this.resource = resource;
}
@Override
public void run() {
for (int i = 0; i < 10; i++) {
try {
Thread.sleep((long) (Math.random() * 1000));
} catch (InterruptedException e) {
e.printStackTrace();
}
resource.increace();
}
}
}
/**
* 消费者线程,负责消费公共资源
*/
public class ConsumerThread implements Runnable {
private PublicResource resource;
public ConsumerThread(PublicResource resource) {
this.resource = resource;
}
@Override
public void run() {
for (int i = 0; i < 10; i++) {
try {
Thread.sleep((long) (Math.random() * 1000));
} catch (InterruptedException e) {
e.printStackTrace();
}
resource.decreace();
}
}
}
三,模拟多个生产者和消费者操作公共资源的情形,结果须保证是在允许的范围内。
Java代码
public class ProducerConsumerTest {
public static void main(String[] args) {
PublicResource resource = new PublicResource();
new Thread(new ProducerThread(resource)).start();
new Thread(new ConsumerThread(resource)).start();
new Thread(new ProducerThread(resource)).start();
new Thread(new ConsumerThread(resource)).start();
new Thread(new ProducerThread(resource)).start();
new Thread(new ConsumerThread(resource)).start();
}
}
以上所述是小编给大家介绍的Java生产者和消费者例子,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# java
# 生产者和消费者
# java实现生产者消费者
# Java 生产者/消费者问题实例详解
# 浅谈java线程中生产者与消费者的问题
# Java并发编程中的生产者与消费者模型简述
# java多线程解决生产者消费者问题
# java解决单缓冲生产者消费者问题示例
# JAVA生产者消费者(线程同步)代码学习示例
# 公共资源
# 多个
# 还想
# 小编
# 是在
# 走了
# 在此
# 出现在
# 给大家
# 满了
# 再去
# 另外一个
# 其中一个
# 解决方法
# 所述
# 给我留言
# 多线程
# 感谢大家
# 空了
# 时再
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Windows Hello人脸识别突然无法使用
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
html如何与html链接_实现多个HTML页面互相链接【互相】
Laravel怎么清理缓存_Laravel optimize clear命令详解
Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】
Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比
如何在Windows环境下新建FTP站点并设置权限?
如何快速查询网站的真实建站时间?
nginx修改上传文件大小限制的方法
Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
如何在局域网内绑定自建网站域名?
非常酷的网站设计制作软件,酷培ai教育官方网站?
免费视频制作网站,更新又快又好的免费电影网站?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
网站图片在线制作软件,怎么在图片上做链接?
Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
如何用PHP快速搭建高效网站?分步指南
Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】
奇安信“盘古石”团队突破 iOS 26.1 提权
Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南
利用vue写todolist单页应用
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
JavaScript如何实现继承_有哪些常用方法
简历没回改:利用AI润色让你的文字更专业
太平洋网站制作公司,网络用语太平洋是什么意思?
Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门
如何快速搭建二级域名独立网站?
手机网站制作与建设方案,手机网站如何建设?
公司网站制作价格怎么算,公司办个官网需要多少钱?
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】
Laravel怎么连接多个数据库_Laravel多数据库连接配置
Laravel如何创建和注册中间件_Laravel中间件编写与应用流程
Linux安全能力提升路径_长期防护思维说明【指导】
JS去除重复并统计数量的实现方法
长沙做网站要多少钱,长沙国安网络怎么样?
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】
香港服务器网站推广:SEO优化与外贸独立站搭建策略
如何在香港服务器上快速搭建免备案网站?
Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区
HTML 中如何正确使用模板变量为元素的 name 属性赋值
Bootstrap整体框架之CSS12栅格系统
Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转
javascript中对象的定义、使用以及对象和原型链操作小结
如何制作一个表白网站视频,关于勇敢表白的小标题?

