Java 多线程模拟:2 生产者 3 消费者的商品生产与购买模式实现
```java public class ProducerConsumer { static int numProducts = 0; static final int MAX_PRODUCTS = 10; public static void main(String[] args) { Thread[] producers = new Thread[2]; Thread[] consumers = new Thread[3]; for (int i = 0; i < producers.length; i++) { producers[i] = new Thread(new ProducerThread(), "Producer-" + i); producers[i].start(); } for (int i = 0; i < consumers.length; i++) { consumers[i] = new Thread(new ConsumerThread(), "Consumer-" + i); consumers[i].start(); } } static class ProducerThread implements Runnable { @Override public void run() { while (true) { synchronized (this) { try { if (numProducts >= MAX_PRODUCTS) { wait(); } else { numProducts++; System.out.println(Thread.currentThread().getName() + " produced a product. Total products: " + numProducts); notifyAll(); } } catch (InterruptedException e) { e.printStackTrace(); } } } } } static class ConsumerThread implements Runnable { @Override public void run() { while (true) { synchronized (this) { try { if (numProducts == 0) { wait(); } else { numProducts--; System.out.println(Thread.currentThread().getName() + " bought a product. Total products: " + numProducts); notifyAll(); } } catch (InterruptedException e) { e.printStackTrace(); } } } } } } ``` 这段代码中,我们创建了两个生产者线程和三个消费者线程。生产者线程的任务是生产商品,消费者线程的任务是购买商品。当商品数量达到上限时,生产者线程暂停生产,直到有商品被消费后才继续生产。当商品数量为0时,消费者线程暂停购买,直到有商品被生产后才继续购买。 在生产者线程中,我们使用`synchronized`关键字来保证线程安全,确保商品数量的操作是原子性的。在达到条件时,我们调用`wait()`方法来暂停线程,并通过`notifyAll()`方法唤醒其他等待的线程。 在消费者线程中也是同样的逻辑,确保线程安全并实现暂停和唤醒的功能。 通过以上代码,我们可以模拟生产消费模式,实现多个生产者和消费者之间的合作。 ######[AI写代码神器 | 1789点数解答 | 2024-11-27 08:37:19]
- 苹果总价计算:n元/箱 × m箱 = 总金额(阿里通义 | 296点数解答 | 2026-03-13 12:10:22)22
- Java 实现复制粘贴功能:打造简易文本复制粘贴程序(GPT | 1497点数解答 | 2024-08-25 09:40:33)438
- 解决数据库“dm.jdbc.driver.dmexception: 数据溢出”问题的全步骤指南(阿里通义 | 598点数解答 | 2024-10-15 15:48:38)337
- 达梦数据库数据溢出问题排查及多维度解决方法(阿里通义 | 403点数解答 | 2024-10-15 15:48:41)1232
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)382
- 易语言实现高并发 HTTP 操作:多线程、线程池与异步操作实战(字节豆包 | 849点数解答 | 2025-06-03 23:17:33)294
- 易语言多线程启动:如何传递并处理文本数组及注意要点(字节豆包 | 610点数解答 | 2025-08-04 18:05:23)205
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)352
- "Java Code: Uncovering Stock Statistics through CSV File Reading"(字节豆包 | 66点数解答 | 2024-11-13 15:31:04)347
- 洛谷乒乓球题解:11 分制与 21 分制比赛结果计算全攻略(DeepSeek | 675点数解答 | 2025-04-28 18:19:45)323
- C++ 模拟:助冒险者用神秘数字构建直角三角形,开发要点大揭秘! (DeepSeek | 156点数解答 | 2025-09-14 21:30:10)321
- P1007:小核桃数组变换难题,Python代码揭秘最终平方和!(字节豆包 | 416点数解答 | 2026-02-07 18:24:18)69