java 编码实现简单的生产者-消费者模式
2017-03-20 17:26
736 查看
相信编程的人都听过生产者消费者模式,今天我们就简单来实现一下,了解一下原理:
这里我们定义的类有:
产品类,该类有产品的一些基本属性,此外还有生产和消费两个功能用以动态改变库存。
生产者类:该类具体生产产品。
消费者类:该类消费产品。
测试类:测试以上代码。
下面看代码,首先是产品类:
运行结果:
这里我们定义的类有:
产品类,该类有产品的一些基本属性,此外还有生产和消费两个功能用以动态改变库存。
生产者类:该类具体生产产品。
消费者类:该类消费产品。
测试类:测试以上代码。
下面看代码,首先是产品类:
package review_java; public class Product { private Integer productNum = 0; public Integer PRODUCT_MAX_NUM = 9; public Integer getProductNum() { return productNum; } public void setProductNum(Integer productNum) { this.productNum = productNum; } public synchronized void produce(){ if(this.productNum >= this.PRODUCT_MAX_NUM){ System.out.println("产品已满,请过后在生产!"); try { wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } //return; } this.productNum ++; System.out.println("生产者生产第" + this.productNum + "个产品."); notifyAll(); } public synchronized void consume(){ if(this.productNum <= 0){ try { wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("产品已售罄,请等待生产!"); //return; } System.out.println("消费者取走了第" + this.productNum + "个产品."); this.productNum --; notifyAll(); //通知等待去的生产者可以生产产品了 } }接下来是生产者和消费者:
package review_java; public class Produce implements Runnable { private Product product; public Produce(Product p){ this.product = p; } @Override public void run() { // TODO Auto-generated method stub while(this.product.getProductNum() <= this.product.PRODUCT_MAX_NUM){ this.product.produce(); try { Thread.sleep(1000);//每隔一秒生产一个产品 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
package review_java; public class Consume implements Runnable { private Product product; public Consume(Product p){ this.product = p; } @Override public void run() { // TODO Auto-generated method stub while(this.product.getProductNum() >= 0){ this.product.consume(); try { Thread.sleep(5000);//每隔5秒消费一个产品 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }下面测试一下:
package review_java; public class test { public static void main(String[] args) { Product product = new Product(); Produce produce = new Produce(product); Consume consume = new Consume(product); Thread produce_thread = new Thread(produce); Thread consume_thread = new Thread(consume); produce_thread.start(); consume_thread.start(); } }
运行结果:
生产者生产第1个产品. 消费者取走了第1个产品. 生产者生产第1个产品. 生产者生产第2个产品. 生产者生产第3个产品. 生产者生产第4个产品. 生产者生产第5个产品. 消费者取走了第5个产品. 生产者生产第5个产品. 生产者生产第6个产品. 生产者生产第7个产品. 生产者生产第8个产品. 生产者生产第9个产品. 消费者取走了第9个产品. 生产者生产第9个产品. 产品已满,请过后在生产! 消费者取走了第9个产品. 生产者生产第9个产品. 产品已满,请过后在生产! 消费者取走了第9个产品. 生产者生产第9个产品. 产品已满,请过后在生产! 消费者取走了第9个产品. 生产者生产第9个产品.
相关文章推荐
- 【Java并发】生产者-消费者模式简单实现(模拟消息队列)
- 设计模式-生产者与消费者Java实现
- JAVA 阻塞队列实现 生产者和消费者 模式
- JAVA 生产者消费者模式的实现
- java生产者/消费者模式实现——一生产者一消费者(操作值)
- java消费者生产者模式及JDK之阻塞队列LinkedBlockingQueue实现
- 【转】Java生产者消费者模式的实现的几种方法
- Java多线程-工具篇-BlockingQueue(实现生产者和消费者模式)
- java 用多线程实现多生产者和多消费者模式
- C++11实现简单生产者消费者模式
- 关于消费者.生产者,缓冲区的简单java实现
- Ruby简单的生产者,消费者模式的实现
- JAVA多线程-线程间通信(二)-生产者/消费者模式实现
- Java Note: 多线程的同步(互斥锁)的方法对比,信号量锁,读写锁的实现,生产者-消费者模式的实现
- linux下c++实现简单的生产者消费者队列模式
- Java生产者-消费者模式的阻塞队列实现
- Java简单实现生产者消费者问题(源自2015年阿里巴巴实习生校园招聘)
- Java Note: 多线程的同步(互斥锁)的方法对比,信号量锁,读写锁的实现,生产者-消费者模式的实现
- 简单生产者消费者模型(java实现)
- Java数据结构之队列的实现以及队列的应用之----简单生产者消费者应用