利用多线程模拟生产消费模式,生产者负责生产商品,消费者负责购买,假设有两个生产者,三个消费者,生产者负责生产商品,消费者负责购买如果商品数量为0,则消费者暂停购买,知道有商品了才继续,每个生产者最多可生产10个商品。


以下是使用 Java 实现多线程模拟生产消费模式的代码: ```java import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; public class ProducerConsumerExample { // 存储商品的阻塞队列 static BlockingQueue<Integer> goods = new LinkedBlockingQueue<>(); // 生产者线程 static class Producer implements Runnable { @Override public void run() { int produced = 0; while (produced < 10) { // 每个生产者最多生产 10 个商品 try { goods.put(1); // 生产一个商品 System.out.println("生产者生产了一个商品,当前商品数量: " + goods.size()); Thread.sleep(1000); // 模拟生产时间 } catch (InterruptedException e) { e.printStackTrace(); } produced++; } } } // 消费者线程 static class Consumer implements Runnable { @Override public void run() { while (true) { if (goods.isEmpty()) { // 如果商品数量为 0 ,暂停购买 try { Thread.sleep(1000); // 等待一段时间再检查 } catch (InterruptedException e) { e.printStackTrace(); } continue; } try { goods.take(); // 购买一个商品 System.out.println("消费者购买了一个商品,当前商品数量: " + goods.size()); Thread.sleep(2000); // 模拟购买时间 } catch (InterruptedException e) { e.printStackTrace(); } } } } public static void main(String[] args) { // 创建两个生产者线程 Thread producer1 = new Thread(new Producer()); Thread producer2 = new Thread(new Producer()); // 创建三个消费者线程 Thread consumer1 = new Thread(new Consumer()); Thread consumer2 = new Thread(new Consumer()); Thread consumer3 = new Thread(new Consumer()); // 启动线程 producer1.start(); producer2.start(); consumer1.start(); consumer2.start(); consumer3.start(); } } ``` 需要注意的逻辑点: 1. 线程的同步和互斥处理,确保对商品队列的操作是线程安全的。 2. 异常处理要完善,比如线程的中断异常、阻塞操作的异常等。 3. 考虑商品生产和消费的速度平衡,避免出现生产者生产过快导致内存溢出,或者消费者消费过快导致空等待。 [2024-11-27 08:33:56 | AI写代码神器 | 594点数解答]
- - ItemId: 12720 #道具id A级赛车 雷诺 ItemNum: 1 #数量 ObtainTime: 1 #时间 AvailPeriod: -1 #0显示数量 -1显示永久 - ItemId: 127758 #道具id 宠物 冰凤 ItemNum: 1 #数量 ObtainTime: 1 #时间 AvailPeriod: -1 #0显示数量 -1显示永久 - ItemId: 21980 #道具id 效率宝珠LV4 ItemNum: 100 #数量 ObtainTime: 1 #时间 AvailPeriod: 0 #0显示数量 -1显示永久 - ItemId: 21986 #道具id 重生宝珠LV4 ItemNum: 100 #数量 ObtainTime: 1 #时间 AvailPeriod: 0 #0显示数量 -1显示永久 这种文本文件如何用易语言读入并显示到超级列表框内 (571点数解答 | 2025-08-23 20:54:40)53
- - ItemId: 12720 #道具id A级赛车 雷诺 ItemNum: 1 #数量 ObtainTime: 1 #时间 AvailPeriod: -1 #0显示数量 -1显示永久 - ItemId: 127758 #道具id 宠物 冰凤 ItemNum: 1 #数量 ObtainTime: 1 #时间 AvailPeriod: -1 #0显示数量 -1显示永久 - ItemId: 21980 #道具id 效率宝珠LV4 ItemNum: 100 #数量 ObtainTime: 1 #时间 AvailPeriod: 0 #0显示数量 -1显示永久 - ItemId: 21986 #道具id 重生宝珠LV4 ItemNum: 100 #数量 ObtainTime: 1 #时间 AvailPeriod: 0 #0显示数量 -1显示永久 这种文本文件如何用易语言读入并显示到超级列表框内,并且可以增加新的一样的文本(1317点数解答 | 2025-08-23 20:58:40)46
- 题目描述 输入三个整数 x , y , z x,y,z, 如果 x x为奇数,输出 1 ∼ y 1∼y之间的所有数,如果 x x为偶数,输出 1 ∼ z 1∼z之间的所有数。 输入格式 输入包括一行,包含三个整数 x , y , z x,y,z,数字之间用空格隔开。 输出格式 输出包括一行 如果 x x为奇数,输出 1 ∼ y 1∼y之间的所有数,如果 x x为偶数,输出 1 ∼ z 1∼z之间的所有数,输出时,数与数之间用1个空格隔开。 input1 复制 1 10 5 output1 复制 1 2 3 4 5 6 7 8 9 10 input2 复制 4 20 4 output2 复制 1 2 3 4 样例解释 对于样例 1 1: x x是奇数, y = 10 y=10,因此输出 1 ∼ 10 1∼10。 对于样例 2 2: x x是偶数, z = 10 z=10,因此输出 1 ∼ 4 1∼4 。 c++ (391点数解答 | 2025-06-14 09:57:45)118
- 题目描述 输入三个整数 x , y , z x,y,z, 如果 x x为奇数,输出 1 ∼ y 1∼y之间的所有数,如果 x x为偶数,输出 1 ∼ z 1∼z之间的所有数。 输入格式 输入包括一行,包含三个整数 x , y , z x,y,z,数字之间用空格隔开。 输出格式 输出包括一行 如果 x x为奇数,输出 1 ∼ y 1∼y之间的所有数,如果 x x为偶数,输出 1 ∼ z 1∼z之间的所有数,输出时,数与数之间用1个空格隔开。 c++(372点数解答 | 2025-07-06 15:39:04)78
- 根据商城网站名称:mallshop 2. 数据库设计: - 用户表(user):存储用户信息,包括用户名、密码、手机号等。 - 商品表(product):存储商品信息,包括商品名称、价格、库存等。 - 购物车表(cart):存储用户的购物车信息,包括用户id、商品id、数量等。 - 订单表(order):存储用户的订单信息,包括订单号、用户id、商品id、数量、总价等。 3. 注册和登录功能: - 用户可以通过注册功能进行账号注册,需要填写用户名、密码和手机号。 - 注册成功后,用户可以使用登录功能输入用户名和密码进行登录。 4.业务功能: - 商品列表展示:用户可以浏览商城的商品列表,包括商品名称、价格等信息。 - 商品详情页:用户可以点击商品列表中的商品,跳转到商品详情页查看商品详细信息。 - 添加商品到购物车:用户可以选择商品的数量,将商品添加到购物车中。 - 购物车列表展示:用户可以查看购物车中的商品列表,包括商品名称、数量、小计等信息。 - 修改购物车中商品数量:用户可以修改购物车中商品的数量。 - 删除购物车中商品:用户可以删除购物车中的商品。 - 创建订单:用户可以将购物(257点数解答 | 2024-12-09 14:08:15)156
- js获取网站的根域名,知道.com .cn这一级(518点数解答 | 2023-10-28 11:31:14)223
- P3631[NOIP2003 普及组] 乒乓球 普及- 字符串 NOIp 普及组 模拟 2003 标准IO 传统题 时间限制 1000ms 内存限制 256MB 通过/尝试次数 411/1121 来源 洛谷 题目背景 国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及。其中 11 11 分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役。华华就是其中一位,他退役之后走上了乒乓球研究工作,意图弄明白 11 11 分制和 21 21 分制对选手的不同影响。在开展他的研究之前,他首先需要对他多年比赛的统计数据进行一些分析,所以需要你的帮忙。 题目描述 华华通过以下方式进行分析,首先将比赛每个球的胜负列成一张表,然后分别计算在 11 11 分制和 21 21 分制下,双方的比赛结果(截至记录末尾)。 比如现在有这么一份记录,(其中 W W 表示华华获得一分, L L 表示华华对手获得一分): WWWWWWWWWWWWWWWWWWWWWWLW WWWWWWWWWWWWWWWWWWWWWWLW 在 11 11 分制下,此时(675点数解答 | 2025-04-28 18:19:45)185
- 在易语言中实现高并发的 HTTP 操作是一个具有一定复杂性和挑战性的任务。 为了处理高并发的 HTTP 请求,可能需要考虑以下几个方面: 1. 多线程:使用多线程技术,让多个线程同时处理不同的 HTTP 请求,以提高并发处理能力。 2. 线程池:管理和复用线程,避免频繁创建和销毁线程带来的性能开销。 3. 异步操作:利用异步方式进行 HTTP 请求,使得在等待响应的过程中可以处理其他任务。 4. 连接池:对于 HTTP 连接进行管理和复用,减少创建连接的时间开销。(849点数解答 | 2025-06-03 23:17:33)101
- 写一个 易语言 多线程 启动 传递 文本数组的例子 (610点数解答 | 2025-08-04 18:05:23)60
- 请基于esp8266开发版和l298n驱动模块写phython代码,使连接驱动的电机可以依次实现正转10秒,暂停,反转十秒。(597点数解答 | 2024-05-16 17:56:20)140
- 使用模式迁移设计思想,实现一个cd播放器的播放管理 specification: 1.cd机有power(电源on/off)、eject(弹出cd)/load(装入cd)、play(播放)/pause(暂停)、previous(前一曲)、next(后一曲) 5个按键; 2.电源on以后,cd可以正常动作; 3.使用load,装入cd;使用eject弹出cd; 4.cd 成功load后,播放功能可以正常操作;可以进行play、pause、选择前一曲/后一曲; 5.电源off后,cd动作停止。(639点数解答 | 2024-08-26 06:31:50)172
- 使用模式迁移设计思想,用c语言实现一个cd播放器的播放管理 ◆ specification: 1.cd机有power(电源on/off)、eject(弹出cd)/load(装入cd)、play(播放)/pause(暂停)、previous(前一曲)、next(后一曲) 5个按键; 2.电源on以后,cd可以正常动作; 3.使用load,装入cd;使用eject弹出cd; 4.cd 成功load后,播放功能可以正常操作;可以进行play、pause、选择前一曲/后一曲; 5. 电源off后,cd动作停止。(948点数解答 | 2024-08-26 06:35:41)173