JAVA多线程实现生产者消费者的实例详解
发布时间 - 2026-01-11 01:48:26 点击率:次JAVA多线程实现生产者消费者的实例详解

下面的代码实现了生产者消费者的问题
Product.Java
package consumerProducer;
public class Product {
private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Product(String id)
{
this.id=id;
}
public String toString()
{
return "product "+id;
}
}
Pool.java
package consumerProducer;
import java.util.*;
public class Pool {
private int number=0;
private List<Product>products=new LinkedList<Product>();
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public synchronized Product consumeProduct(){ //可以去掉synchronized关键字
if(products.size()>0)
{ Product p= products.get(0);
products.remove(0);
number--;
return p;
}
else
return null;
}
public synchronized void addProduct(Product p){ //可以去掉synchronized关键字
products.add(p);
number++;
}
}
Consumer.java
package consumerProducer;
public class Consumer implements Runnable {
private String id;
Pool pool;
public Consumer(String id,Pool pool)
{
this.id=id;
this.pool=pool;
}
@Override
public void run() {
while(!Thread.currentThread().interrupted())
{
Product product=null;
synchronized(pool){
while(pool.getNumber()<=0)//生产不足
{
try {
pool.wait();//生产者等待
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
product=pool.consumeProduct();
}
System.out.println("consuming "+id+product.toString());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
Producer.java
package consumerProducer;
public class Producer implements Runnable{
private int i_p=0;
private String id;
Pool pool;
int i=0;
public Producer(String id ,Pool pool)
{
this.id=id;
this.pool=pool;
}
public Product createProduct()
{
return new Product(String.valueOf(++i_p));
}
@Override
public void run() {
// TODO Auto-generated method stub
while(!Thread.currentThread().interrupted())
{
Product p=new Product(String.valueOf(++i_p));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
synchronized(pool)
{
pool.addProduct(p);
System.out.println("producer "+id+" adding product...."+p.toString());
pool.notifyAll();
}
}
}
}
Main.java
package consumerProducer;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Pool pool=new Pool();
for(int i=0;i<5;i++)
{
Thread consumer=new Thread(new Consumer("consumer "+i,pool));
Thread producer=new Thread(new Producer("producer "+i,pool));
consumer.start();
producer.start();
}
}
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# JAVA多线程实现生产者消费者的实例详解
# java
# 线程生产者与消费者的问题
# 基于Java 生产者消费者模式(详细分析)
# Java生产者消费者模式实例分析
# Java多种方式实现生产者消费者模式
# Java实现简易生产者消费者模型过程解析
# Java编程生产者消费者实现的四种方法
# 希望能
# 谢谢大家
# 多线程
# 实现了
# number
# int
# lt
# List
# util
# Pool
# product
# import
# br
# consumeProduct
# synchronized
# remove
# size
# setNumber
# products
# gt
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
香港服务器网站卡顿?如何解决网络延迟与负载问题?
如何快速生成凡客建站的专业级图册?
如何在阿里云香港服务器快速搭建网站?
Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤
Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】
android nfc常用标签读取总结
如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)
Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理
佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】
Laravel怎么生成URL_Laravel路由命名与URL生成函数详解
如何正确下载安装西数主机建站助手?
百度输入法ai组件怎么删除 百度输入法ai组件移除工具
WEB开发之注册页面验证码倒计时代码的实现
Laravel怎么自定义错误页面_Laravel修改404和500页面模板
Win11怎么设置默认图片查看器_Windows11照片应用关联设置
C语言设计一个闪闪的圣诞树
html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】
Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置
移动端脚本框架Hammer.js
Firefox Developer Edition开发者版本入口
高端网站建设与定制开发一站式解决方案 中企动力
深入理解Android中的xmlns:tools属性
Laravel怎么判断请求类型_Laravel Request isMethod用法
如何在Windows环境下新建FTP站点并设置权限?
Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】
Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】
Laravel如何处理文件下载请求?(Response示例)
中山网站制作网页,中山新生登记系统登记流程?
奇安信“盘古石”团队突破 iOS 26.1 提权
Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】
Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理
Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用
实例解析Array和String方法
Python3.6正式版新特性预览
iOS发送验证码倒计时应用
Laravel如何实现用户注册和登录?(Auth脚手架指南)
如何在局域网内绑定自建网站域名?
Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】
如何在VPS电脑上快速搭建网站?
Laravel如何生成URL和重定向?(路由助手函数)
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
高性能网站服务器部署指南:稳定运行与安全配置优化方案
如何快速搭建安全的FTP站点?

