消费者和生产模式是典型的软件应用场景,比如工厂生产出产品,先送到商店,消费者再到商店去买。
生产者不会每生产一个就送到商店去,一般是生产一定数量的产品,比如生产数量为N时,再送到商店去,这样减少来回运输的成本。这样当商店的N个产品卖完时,消费者再来买时需要等待(wait),当商店有N个产品未卖时,生产者需要停止生产,等待产品销售,产品量小于N时再开始生产。
下面以代码来实现上面的场景:
生产类:
/** * 生产者 */ public class Producer implements Runnable{ private Shop s; public Producer(Shop s) { this.s = s; } /** * 生产产品 */ public void produce(Product p){ s.purchase(p); } public void run() { for(int i=0;i<20;i++){ Product p = new Product(); p.setName("product" + i); s.purchase(p); } } }
消费类:
/** * 消费者 */ public class Consumer implements Runnable{ private Shop s; public Consumer(Shop s) { this.s = s; } /** * 购买产品 */ public Product buy(){ Product p = s.sell(); return p; } public void run() { for(int i=0;i<20;i++){ Product p = buy(); System.out.println(p.getName()); } } }
商店类:
/** * 商店 */ public class Shop { //库存最大值 private int size = 10; List<Product> _list = new ArrayList<Product>(); /** * 销售产品 */ public synchronized Product sell() { if(_list.size()<=0){ try { // wait方法一般用在synchronized中 wait(); } catch (InterruptedException e) { e.printStackTrace(); } } else { notify(); } return _list.remove(_list.size()-1); } /** * 采购产品 * @param p */ public synchronized void purchase(Product p){ if(_list.size()>=size){ try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } else { notify(); } _list.add(p); } }
产品类:
/** * 产品 */ public class Product { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
测试类:
public class ProcessTest { /** * @param args */ public static void main(String[] args) { Shop s = new Shop(); Producer p = new Producer(s); Thread _p = new Thread(p); Consumer c = new Consumer(s); Thread _c = new Thread(c); _p.start(); _c.start(); } }
处理场景是这样的,商店不停采购和销售产品,但商店的库存有限,只能存放定量产品,当商店库存满时,停止采购,此时生产者处于暂停状态,直到商店库存量小于最大值时恢复生产,消费者不停购买产品,当商店的产品库存量为0时,消费者停止购买,处于等待状态,等商店库存量大于0时,再恢复购买。
相关推荐
生产者和消费者模式是多线程编程中一个经典的设计模式,它主要解决的是在多线程环境下资源的有效利用和同步问题。在这个模式中,生产者负责生成数据,而消费者负责消费这些数据。为了保证生产与消费的平衡以及避免...
生产者消费者模式是一种多线程或并发编程中的经典设计模式,它主要用于解决系统资源的高效利用和同步问题。在C++中实现生产者消费者模式,我们可以利用C++11及更高版本提供的线程库()、互斥量()、条件变量()等...
通过理解和掌握这些知识点,开发者能够有效地实现生产者-消费者模式,解决并发编程中的数据共享和协作问题。在实际项目中,这个模式常用于优化系统性能,尤其是在I/O密集型或计算密集型的应用中。
根据给定的文件信息,我们可以总结出以下关于“生产者和消费者模式”的相关知识点: ## 生产者与消费者模式概述 生产者与消费者模式是一种经典的多线程编程模型,广泛应用于计算机科学领域,特别是在并发编程中。...
总之,生产者消费者模式和中介者设计模式的结合是解决并发问题的一种有效方式,它可以帮助我们构建更加灵活、可维护的系统。通过阅读你提供的`consumption`代码,我们可以深入理解这些概念在实际项目中的应用。
首先,生产者-消费者模式是解决资源同步和共享问题的一种方式。在这个模式中,生产者生成数据并将其放入一个共享的数据结构(例如队列),而消费者则从这个队列中取出数据进行处理。这种模式确保了生产者和消费者...
生产者消费者模式是一种多线程同步的经典设计模式,它在多线程编程中扮演着重要的角色,用于协调生产数据和消费数据的两个并发过程。在本项目“Qt C++11 生产者消费者模式类”中,我们看到利用Qt框架和C++11的新特性...
labview 基于事件的生产者消费者模式
【生产者/消费者模式】是一种常见的并发编程和系统设计模式,它主要解决的是在多线程环境下,如何协调生产者和消费者之间的数据处理问题。在软件开发中,生产者通常是生成数据的一方,而消费者则是处理这些数据的...
【生产者与消费者模式】是一种经典的设计模式,它在解决多客户端与服务器之间的数据交换与传输问题上有着广泛的应用。该模式的核心思想是通过一个中间缓冲区,将生产数据的过程与消费数据的过程解耦,使得生产者可以...
生产者消费者模式是一种经典的多线程同步问题解决方案,它源于现实世界中的生产流水线,用于描述生产者(Producer)和消费者(Consumer)之间的协作关系。在这个模式中,生产者负责生成产品并放入仓库,而消费者则从...
生产者消费者模式的构建可以实现系统的高内聚和低耦合,这使得它成为软件开发中经常采用的一种设计方法。 生产者消费者模式的核心思想在于生产者和消费者之间的角色分离。在这个模式中,生产者的主要任务是生成数据...
总结来说,SpringCloud 2.0的这个示例展示了如何使用服务生产者和消费者模式进行微服务间的通信。通过Eureka实现服务注册与发现,利用RestTemplate进行服务调用,结合Ribbon进行负载均衡,以及Hystrix进行容错管理。...
生产者消费者模式基于操作系统提供的信号量(Semaphore)或管程(Monitor)等机制,以解决进程间的通信和同步问题。在这个模式中,生产者进程负责生成数据并放入缓冲区,而消费者进程则负责从缓冲区取出数据进行处理...
但是在Labview中的标准设计模式中,生产消费者模式是在一个vi中的,必须通过队列的方式连接起来。 附件的Buffer可以实现在不同的vi中实现数据的传输,生产者和消费者可以是二个独立的vi,程序结构简捷。并且可以...
LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC...
7. **例程分析**:在提供的"生产者消费者"例程中,可能包含了创建生产者和消费者线程、初始化队列、添加数据到队列、从队列中取出数据、以及使用同步机制保证正确性的代码片段。通过对这些例程的分析和运行,可以...
本文将基于提供的代码示例来详细阐述生产者和消费者模式的基本概念、实现原理及其应用场景。 #### 1. 基本概念 生产者-消费者模型是一种经典的数据处理模型,它描述了一组生产数据的线程(生产者)和一组消费这些...
总之,Java中的生产者-消费者模式是多线程编程中解决数据共享和同步问题的有效手段,通过合理利用`BlockingQueue`等并发工具类,我们可以构建高效、稳定的多线程应用。在开发过程中,了解和掌握这种模式有助于提高...