一、介绍:
(一)、概念:
如果要实现以下操作流程,使用Java代码来实现:
- 多个蛋糕师生产蛋糕,多个消费者购买蛋糕;
- 蛋糕的最大库存为5个;
- 早生产的蛋糕先被销售,最后被生产的蛋糕要最后被售出
如果要实现这个过程,一定要借助Java线程的并发协作来做。其实这在Java中叫做生产者消费者模型(确切说应该是“生产者-消费者-仓储”模型)。
对于多线程程序来说,不管任何编程语言,生产者和消费者模型都是最经典的。就像学习每一门编程语言一样,Hello World!都是最经典的例子。
(二)、 生产者消费者模型,应该明确一下几点:
1、生产者仅仅在仓储未满时候生产,仓满则停止生产。
2、消费者仅仅在仓储有产品时候才能消费,仓空则等待。
3、当消费者发现仓储没产品可消费时候会通知生产者生产。
4、生产者在生产出可消费产品时候,应该通知等待的消费者去消费。
(三)、核心技术:
Java中提供了三个非常重要方法用来解决“生产者-消费者-仓储”模型 。
- wait():让当前线程进入阻塞状态,将这个线程存储到等待池中,并释放当前线程的所获得的锁
- notify():唤醒等待池中的一个线程(随机)
- notifyAll():唤醒等待池中所有的线程
【注意】
- wait、notify、notifyAll三个方法必须被在同步代码中被调用
- 这些方法都是用于操作线程状态,那么就必须要明确到底操作的是哪个锁上的线程
|
|