多线程之生产者消费者浅析

生产者消费者模型:

生产者消费者问题是研究多线程程序时绕不开的经典问题之一,它描述是有一块缓冲区作为仓库,生产者可以将产品放入仓库,消费者则可以从仓库中取走产品。解决生产者/消费者问题的方法可分为两类:(1)采用某种机制保护生产者和消费者之间的同步;(2)在生产者和消费者之间建立一个管道。第一种方式有较高的效率,并且易于实现,代码的可控制性较好,属于常用的模式。第二种管道缓冲区不易控制,被传输数据对象不易于封装等,实用性不强。因此本文只介绍同步机制实现的生产者/消费者问题。

同步问题核心在于:如何保证同一资源被多个线程并发访问时的完整性。常用的同步方法是采用信号或加锁机制,保证资源在任意时刻至多被一个线程访问。Java语言在多线程编程上实现了完全对象化,提供了对同步机制的良好支持。在Java中一共有四种方法支持同步,其中前三个是同步方法,一个是管道方法。

(1)wait() / notify()方法

(2)await() / signal()方法

(3)BlockingQueue阻塞队列方法

对于此模型,应该明确一下几点: 

 1.生产者仅仅在仓储未满时生产,仓满则停止生产。

 2.消费者仅仅在仓储有产品时才能消费,仓空则等待。

 3.当消费者发现仓储没有产品的时候会通知生产者生产。

 4.生产者在生产出可消费产品的时候,应该通知等待的消费者去消费.

 

posted @ 2017-04-24 15:51  落叶已归根  阅读(169)  评论(0编辑  收藏  举报