在经过一些多线程的相关知识的学习后,我们进行了生产消费模型的学习和理解。
主要解决了以下问题:
1.什么是生产消费模型
2.为什么要使用生产消费模型
3.生产消费模型的代码实现
4.困难和故障的处理和排除
1.什么是生产消费模型
经典并发同步模式:生产者-消费者设计模式
生产者消费者模式是程序设计中非常常见的一种设计模式,被广泛运用在解耦、消息队列等场景
首先回顾一下线程的生命周期:
之所以提到这个,是需要说,当我们在处理多线程的问题的时候,很多时候共享资源的线程因为触发了某些条件进入”休息“状态,这个线程并非是终止了,而是进入了等待状态,这个线程本身并未关闭。这从效率上来说也是合理的,因为如果每次线程都终止,那么不断的创建和终止线程势必会消耗大量的资源,这是多线程所要避免的。
具体来看,我们把生产商品的一方称为生产者,把消费商品的一方称为消费者,当生产和消费的进程对资源的使用速度不同的时候,就会出现配合上的问题。生产者消费者模式就是解决这类问题的。
2.为什么要使用生产者消费者模式
在多线程开发中,如果生产者生产数据的速度很快,而消费者消费数据的速度很慢,那么生产者就必须等待消费者消费完了数据才能够继续生产数据,因为生产那么多也没有地方放啊;同理如果消费者的速度大于生产者那么消费者就会经常处理等待状态,所以为了达到生产者和消费者生产数据和消费数据之间的平衡,那么就需要一个缓冲区用来存储生产者生产的数据,所以就引入了生产者-消费者模式
简单来说这里的缓冲区的作用就是为了平衡生产者和消费者的处理能力,起到一个数据缓存的作用,同时也达到了一个解耦的作用。
3.代码实现
因为生产者消费者模式通常是面对多线程的场景,需要一定的同步措施保障线程安全。
3.1 同步方法
使用同步方法实现生产者消费者模型。思路是先写一个仓库类,定义生产和消费的方法,然后写生产者和消费者线程,在线程中调用仓库类的方法。
//仓库类
import java.util.ArrayList;
import java.util.List;
public class Store {
final int max=5;
int i=1;
int j=0;
List<String> content = new ArrayList<>()