并发系列之生产者消费者模式
简要
生产者消费者模式是一个经典的多线程设计模式,它为多线程间的协作提供了良好了解决方案。一般这种设计模式都是基于阻塞队列的,当数据生成时,生产者把数据放入队列,而当消费者准备处理数据时,将从队列中获取数据。
例子
以两个人洗盘子为例,二者的劳动分工也是一种生产者—消费者模式:其中一个人把洗好的盘子放在盘架上,而另一个从盘架上取出盘子并把他们烘干。在这个示例中,盘架相当于阻塞队列。如果盘架上没有盘子,那么消费者就会一直等待,直到有盘子需要烘干。如果盘架放满了,那么生产者就会停止清洗盘子直到盘架上有更多的空间。我们可以将这种类比扩展为多个生产者(虽然可能存在对水槽的竞争)和多个消费者,每个工人只需与盘架打交道。人们不需要知道究竟有多少生产者或消费者,或者谁生产了某个指定的工作项。
代码实现
创建“盘子”这个被消费的对象
1 | 'public class Plate { |
创建一个生产者
1 | public class Provider implements Runnable{ |
创建一个消费者
1 | public class Consumer implements Runnable{ |
测试类
1 | public class MainTest { |
console
1 | 当前线程:pool-1-thread-1,获取了盘子,id为:1,进行装载到公共缓冲区中... |