Java多线程编程——生产者-消费者模式(1)
2017-08-11 10:40
239 查看
生产者-消费者模式在生活中非常常见。就拿我们去餐馆吃饭为例。我们会遇到以下两种情况:
1、厨师-客人
如下图所示,生产者、消费者直接进行交互。
生产者生产出产品后,通知消费者;消费者消费后,通知生产者。
以餐厅为例,厨师做好了一碗面,大声招呼:“13号,你的面好了!”;食客吃完了面,大声招呼:“师傅,我吃完了,再来一碗!”
这种模式非常传统。小餐馆一般采用这种模式,食客不多,厨师也不多。
但是,我们都知道稍微大一点的餐馆都不会采用这种方式。
生产者、消费者直接交互的方式在有多个生产者、消费者的时候容易带来混乱。
原因很简单,生产者、消费者的职责都不单一。
为了解决上面的问题,就出现了下面2的交互方式。
2、自助取餐
回想一下现在到外面就餐的场景:
食客到店,点餐,点完餐后,在取餐区等待;厨师做好食物后,把食物放到取餐区,食客自助取餐。
这种情况下食客与厨师不会直接交互。厨师、食客都可以专心于自己的工作,不会因为过多的交流降低效率、造成误会什么的。
上面的情况就如下图所示
生产者生产出产品后,把产品放置到仓库;消费者看到仓库有产品自动取餐。
这种方式下,每个人的职责变得单一。在这种情况下,工作效率会大大提升,出错率也会有效地降低。
说了这么多,总结而言,生产者-消费者模式就是为了解耦,单一职责。
1、厨师-客人
如下图所示,生产者、消费者直接进行交互。
生产者生产出产品后,通知消费者;消费者消费后,通知生产者。
以餐厅为例,厨师做好了一碗面,大声招呼:“13号,你的面好了!”;食客吃完了面,大声招呼:“师傅,我吃完了,再来一碗!”
这种模式非常传统。小餐馆一般采用这种模式,食客不多,厨师也不多。
但是,我们都知道稍微大一点的餐馆都不会采用这种方式。
生产者、消费者直接交互的方式在有多个生产者、消费者的时候容易带来混乱。
原因很简单,生产者、消费者的职责都不单一。
为了解决上面的问题,就出现了下面2的交互方式。
2、自助取餐
回想一下现在到外面就餐的场景:
食客到店,点餐,点完餐后,在取餐区等待;厨师做好食物后,把食物放到取餐区,食客自助取餐。
这种情况下食客与厨师不会直接交互。厨师、食客都可以专心于自己的工作,不会因为过多的交流降低效率、造成误会什么的。
上面的情况就如下图所示
生产者生产出产品后,把产品放置到仓库;消费者看到仓库有产品自动取餐。
这种方式下,每个人的职责变得单一。在这种情况下,工作效率会大大提升,出错率也会有效地降低。
说了这么多,总结而言,生产者-消费者模式就是为了解耦,单一职责。
相关文章推荐
- java多线程15 :wait()和notify() 的生产者/消费者模式
- Java多线程生产者/消费者模式(二)
- JAVA多线程-线程间通信(二)-生产者/消费者模式实现
- Java基础多线程间通讯之多生产者、多消费者模式示例:
- java多线程之消费者生产者模式(一)
- Java多线程——生产者和消费者模式
- Java多线程编程核心技术——生产者消费者模型
- Java多线程 - 实现生产者与消费者模式
- 【Java多线程】生产者消费者模式
- 多线程编程:生产者消费者模式
- java多线程之消费者生产者模式
- java多线程之消费者生产者模式
- Java多线程之并发协作生产者消费者设计模式
- Java多线程——使用wait/notify实现生产者/消费者模式
- Java多线程之并发协作生产者消费者设计模式
- Java Note: 多线程的同步(互斥锁)的方法对比,信号量锁,读写锁的实现,生产者-消费者模式的实现
- (7)Java多线程之消费者/生产者模式
- Java多线程之消费者生产者模式
- Java Note: 多线程的同步(互斥锁)的方法对比,信号量锁,读写锁的实现,生产者-消费者模式的实现
- Java并发编程 生产者消费者模式