例子用java多线程模拟生产者消费者的例子,上代码,代码有注释说的清楚:
仓库
package day5; /** * <p>Title: Warehouse.java</p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2014</p> * @author 雪含心 * @date 2014年2月7日 */ public class Warehouse { private int MAXNUM = 100; private int currentCount; public Warehouse(int i) { this.currentCount = i; } /** * 生产者 * @param neednum */ public synchronized void produce(int neednum){ // 当当前的数量和生产的数量大于仓库容量时等待消费 while (currentCount + neednum > MAXNUM) { try { System.out.println("要生产的产品" + neednum + "个产品,超过仓库最大值" + MAXNUM); wait(); } catch (InterruptedException e) { e.printStackTrace(); } } currentCount += neednum; System.out.println("已经生产了" + neednum + "个产品,现仓储量为" + currentCount); notifyAll(); } /** * 消费者方法 * @param neednum */ public synchronized void consume(int neednum){ // 当当前的消费的数量大于库存时等待生产 while (currentCount < neednum) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } currentCount -= neednum; System.out.println("已经消费了" + neednum + "个产品,现仓储量为" + currentCount); notifyAll(); } }
生产者
package day5; /** * <p>Title: Productor.java</p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2014</p> * @author 雪含心 * @date 2014年2月7日 */ public class Producer extends Thread { private Warehouse house; private int neednum; public Producer(Warehouse house, int neednum){ this.neednum = neednum; this.house = house; } @Override public void run() { house.produce(neednum); } }
消费者
package day5; /** * <p>Title: Consumer.java</p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2014</p> * @author 雪含心 * @date 2014年2月7日 */ public class Consumer extends Thread { private Warehouse house; private int neednum; public Consumer(Warehouse house, int neednum){ this.neednum = neednum; this.house = house; } @Override public void run() { house.consume(neednum); } }
测试用例
package day5; /** * <p>Title: Test.java</p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2014</p> * @author 雪含心 * @date 2014年2月7日 */ public class Test { public static void main(String[] args) { Warehouse hourse = new Warehouse(30); while(true){ Consumer c1 = new Consumer(hourse,50); Consumer c2 = new Consumer(hourse, 20); Consumer c3 = new Consumer(hourse, 30); Consumer c4 = new Consumer(hourse,50); Consumer c5 = new Consumer(hourse, 20); Consumer c6 = new Consumer(hourse, 30); Producer p1 = new Producer(hourse, 10); Producer p2 = new Producer(hourse, 10); Producer p3 = new Producer(hourse, 10); Producer p4 = new Producer(hourse, 10); Producer p5 = new Producer(hourse, 10); Producer p6 = new Producer(hourse, 10); Producer p7 = new Producer(hourse, 80); c1.start(); c2.start(); c3.start(); c4.start(); c5.start(); c6.start(); p1.start(); p2.start(); p3.start(); p4.start(); p5.start(); p6.start(); p7.start(); } } }
相关推荐
本示例中的“生产者-消费者”模型是一种经典的多线程问题,它模拟了实际生产环境中的资源分配与消耗过程。下面我们将详细探讨如何在Java中实现这个模型。 首先,我们要理解生产者-消费者模型的基本概念。在这个模型...
### Java多线程-生产者与消费者问题 #### 一、生产者与消费者问题概览 **1.1 概要** 生产者与消费者问题是计算机科学中一个多线程同步的经典问题。它描述了两个线程如何共享有限资源的场景:一个是生产者...
在并发编程中,"生产者-消费者"模式是一种经典的解决问题的范式,用于协调两个或更多线程间的协作,其中一部分线程(生产者)生成数据,另一部分线程(消费者)消费这些数据。 生产者-消费者模型的核心在于共享资源...
生产者-消费者实例可以很好帮助初学java的同学们理解和学习多线程的知识
java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型...
生产者-消费者模式是一种经典的多线程设计模式,用于解决数据共享问题,尤其是在一个线程生产数据而另一个线程消费数据的情况下。在这个模式中,生产者负责生成数据并放入共享的数据结构(如队列),而消费者则从这...
在本示例中,“java多线程例子-生产者消费者”旨在展示如何利用多线程来实现生产者和消费者模式。这种模式是并发编程中的经典设计模式,用于协调生产数据和消费数据的两个不同线程。 生产者消费者模式的基本概念是...
生产者消费者模型是一种经典的线程同步问题,它模拟了实际生活中的生产过程和消费过程,使得生产者线程可以将数据生产出来,而消费者线程则负责消耗这些数据,两者之间通过共享数据结构进行协同工作。 生产者消费者...
用java多线程,实现生产者消费者同步和互斥的问题,操作系统中的经典问题
生产者消费者模式是一种设计模式,它描述了两个不同类型的线程如何协作完成工作:生产者负责生成数据,而消费者负责消耗这些数据。为了使这个模式在多线程环境下安全运行,我们需要使用Java中的同步机制。 1. **...
在实际应用中,我们常常会遇到一种典型的多线程问题——生产者消费者模型。这个模型描述了两种类型的线程:生产者线程负责创建或生产资源,而消费者线程则负责消耗这些资源。在Java中,我们可以利用同步机制来实现...
java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现...
总的来说,理解和掌握生产者消费者问题及其解决策略是Java多线程编程的重要部分,这不仅有助于编写高效、可靠的并发代码,也是提升软件设计能力的关键一步。通过不断实践和学习,开发者能够更好地应对复杂的并发场景...
通过学习和实践"生产者-消费者"模型,开发者能够更好地理解和掌握Java多线程的精髓,为构建高并发、高效率的应用打下坚实的基础。在实际项目中,这种模型常被用于实现缓存管理、消息队列以及数据库连接池等场景。
"生产者-消费者"模式是多线程编程中的一个经典设计模式,它体现了线程间的协作和同步。在这个模式中,"生产者"线程负责创建资源,而"消费者"线程则负责消耗这些资源。这个模式在实际应用中非常常见,例如在消息队列...
基本满足操作系统课上要求,java实现的生产者消费者模型。
Java 多线程主题1- Java 多线程启动线程2- Java 多线程Volatile – 基本线程通信3- Java 多线程同步4- Java 多线程锁对象5- Java 多线程线程池6- Java 多线程倒计时闩锁7- Java 多线程生产者-消费者8- Java 多线程...
"典型的多线程--生产和消费"这个主题,通常指的是生产者-消费者问题,这是一种经典的设计模式,用于解决如何在一个数据结构(如队列)中高效地存储和检索数据,同时避免生产者过于快速地生成数据而消费者无法及时...
生产者消费者模式是一种经典的多线程同步问题解决方案,它源于现实世界中的生产流水线,用于描述生产者(Producer)和消费者(Consumer)之间的协作关系。在这个模式中,生产者负责生成产品并放入仓库,而消费者则从...