`

java多线程-生产者消费者

阅读更多

    例子用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中实现这个模型。 首先,我们要理解生产者-消费者模型的基本概念。在这个模型...

    Java多线程-生产者与消费者问题

    ### Java多线程-生产者与消费者问题 #### 一、生产者与消费者问题概览 **1.1 概要** 生产者与消费者问题是计算机科学中一个多线程同步的经典问题。它描述了两个线程如何共享有限资源的场景:一个是生产者...

    java多线程实现生产者和消费者

    在并发编程中,"生产者-消费者"模式是一种经典的解决问题的范式,用于协调两个或更多线程间的协作,其中一部分线程(生产者)生成数据,另一部分线程(消费者)消费这些数据。 生产者-消费者模型的核心在于共享资源...

    java-线程-生产者消费者实例

    生产者-消费者实例可以很好帮助初学java的同学们理解和学习多线程的知识

    java多线程经典模型生产者消费者

    java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型...

    Java多线程 生产者-消费者模式

    生产者-消费者模式是一种经典的多线程设计模式,用于解决数据共享问题,尤其是在一个线程生产数据而另一个线程消费数据的情况下。在这个模式中,生产者负责生成数据并放入共享的数据结构(如队列),而消费者则从这...

    java多线程例子-生产者消费者

    在本示例中,“java多线程例子-生产者消费者”旨在展示如何利用多线程来实现生产者和消费者模式。这种模式是并发编程中的经典设计模式,用于协调生产数据和消费数据的两个不同线程。 生产者消费者模式的基本概念是...

    Java线程间的通信----生产者消费者模型

    生产者消费者模型是一种经典的线程同步问题,它模拟了实际生活中的生产过程和消费过程,使得生产者线程可以将数据生产出来,而消费者线程则负责消耗这些数据,两者之间通过共享数据结构进行协同工作。 生产者消费者...

    java多线程实现生产者消费者问题

    用java多线程,实现生产者消费者同步和互斥的问题,操作系统中的经典问题

    java多线程(生产者与消费者)

    生产者消费者模式是一种设计模式,它描述了两个不同类型的线程如何协作完成工作:生产者负责生成数据,而消费者负责消耗这些数据。为了使这个模式在多线程环境下安全运行,我们需要使用Java中的同步机制。 1. **...

    java多线程实现生产者消费者关系

    在实际应用中,我们常常会遇到一种典型的多线程问题——生产者消费者模型。这个模型描述了两种类型的线程:生产者线程负责创建或生产资源,而消费者线程则负责消耗这些资源。在Java中,我们可以利用同步机制来实现...

    java实现多线程经典模型生产者消费

    java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现...

    线程同步--生产者消费者问题

    总的来说,理解和掌握生产者消费者问题及其解决策略是Java多线程编程的重要部分,这不仅有助于编写高效、可靠的并发代码,也是提升软件设计能力的关键一步。通过不断实践和学习,开发者能够更好地应对复杂的并发场景...

    【IT十八掌徐培成】Java基础第08天-04.多线程-生产者-消费者.zip

    通过学习和实践"生产者-消费者"模型,开发者能够更好地理解和掌握Java多线程的精髓,为构建高并发、高效率的应用打下坚实的基础。在实际项目中,这种模型常被用于实现缓存管理、消息队列以及数据库连接池等场景。

    【IT十八掌徐培成】Java基础第08天-05.多线程-生产者-消费者2.zip

    "生产者-消费者"模式是多线程编程中的一个经典设计模式,它体现了线程间的协作和同步。在这个模式中,"生产者"线程负责创建资源,而"消费者"线程则负责消耗这些资源。这个模式在实际应用中非常常见,例如在消息队列...

    操作系统:多线程处理生产者消费者,java实现

    基本满足操作系统课上要求,java实现的生产者消费者模型。

    Java 多线程课程的代码及少量注释.zip

    Java 多线程主题1- Java 多线程启动线程2- Java 多线程Volatile – 基本线程通信3- Java 多线程同步4- Java 多线程锁对象5- Java 多线程线程池6- Java 多线程倒计时闩锁7- Java 多线程生产者-消费者8- Java 多线程...

    典型的多线程--生产和消费

    "典型的多线程--生产和消费"这个主题,通常指的是生产者-消费者问题,这是一种经典的设计模式,用于解决如何在一个数据结构(如队列)中高效地存储和检索数据,同时避免生产者过于快速地生成数据而消费者无法及时...

    多线程简易实现生产者消费者模式

    生产者消费者模式是一种经典的多线程同步问题解决方案,它源于现实世界中的生产流水线,用于描述生产者(Producer)和消费者(Consumer)之间的协作关系。在这个模式中,生产者负责生成产品并放入仓库,而消费者则从...

Global site tag (gtag.js) - Google Analytics