例子用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多线程--生产者与消费者问题
编写一个“生产者-消费者”的多线程演示程序,两个生产者,一个消费者,可以存放产品的仓库容量为10,仓库用栈实现,并有同步功能,且能防止先消费后生产的情况。
java多线程实现生产者和消费者
生产者-消费者实例可以很好帮助初学java的同学们理解和学习多线程的知识
java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型生产者消费者java多线程经典模型...
java多线程实现生产者消费者关系,完成线程之间的同步。
用java多线程,实现生产者消费者同步和互斥的问题,操作系统中的经典问题
【IT十八掌徐培成】Java基础第08天-04.多线程-生产者-消费者.zip
【IT十八掌徐培成】Java基础第08天-05.多线程-生产者-消费者2.zip
java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现...
使用一个共享队列,生产者把产品放入队列,消费者消费产品,实现简单的多线程示例.
生产者消费者模式是java多线程经典的安全,它用到了同步,资源共享,wait,notify等技术。
用java多线程简易实现生产者消费者模式的代码,用java多线程简易实现生产者消费者模式的代码。
基本满足操作系统课上要求,java实现的生产者消费者模型。
NULL 博文链接:https://hbkh2000.iteye.com/blog/378843
利用线程间的通信主要是因为当多个线程同时对一个对象进行访问的时候,多个线程之间是一个协助的关系,举个例子就是今天要说的生产这和消费者模型。
java 多线程 生产者消费者模式,你值得拥有
Java线程:并发协作-生产者消费者模型 Java线程:并发协作-死锁 Java线程:volatile关键字 Java线程:新特征-线程池 Java线程:新特征-有返回值的线程 Java线程:新特征-锁(上) Java线程:新特征-锁(下) ...
java 多线程生产者消费者模型demo
Java线程:并发协作-生产者消费者模型 Java线程:并发协作-死锁 Java线程:volatile关键字 Java线程:新特征-线程池 Java线程:新特征-有返回值的线程 Java线程:新特征-锁(上) Java线程:新特征-锁(下) Java...