一、生产者消费者模式概述

生产者消费者模式是一个十分经典的多线程协作的模式,弄懂生产者消费者问题就能够让我们对多线程编程的理解更加深刻。
所谓生产者消费者问题,实际上主要包含了两类线程:
一类是生产者线程用于生产数据
一类是消费者线程用于消费数据

为了解耦生产者和消费者的关心,通常会采用共享的数据区域,就想是一个仓库
生产者生产数据之后直接放置在共享数据区中,并不需要关心消费者的行为
消费者只需要从共享数据区中获取数据,并不需要关心生产者的行为。

生产者======》共享数据区域《======消费者

二、等待与唤醒

为了体现生产者和消费过程中的等待和唤醒,Java就提供了几个方法供我们使用,这几个方法在Object类中。

  1. //导致当前线程等待,只到另一个线程调用该对象的notify()方法或者notifyAll()方法
  2. public final void wait() throws InterruptedException {
  3. this.wait(0L);
  4. }
  5. //唤醒正在等待对象监视器的单个线程
  6. public final native void notify();
  7. //唤醒正在等待对象监视器的所有线程
  8. public final native void notifyAll();

三、生产者消费者案例

image.png