酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

利用多线程模拟生产消费模式,生产者负责生产商品,消费者负责购买,假设有两个生产者,三个消费者,生产者负责生产商品,消费者负责购买如果商品数量为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点数解答]

相关提问