文章目录
为什么使用生产者和消费者模式
- 为什么使用生产者和消费者模式
- 什么是生产者消费者模式
- 用wait和notify 实现 生产者消费者设计模式
生产者用于生产数据, 消费者用于消费数据. 可能出现的情况是生产者生产的数据过慢,导致了消费者一直等待. 也可能消费者消费的过慢, 让生产者一直等待去生产. 于是就诞生了生产者 消费者模式, 让生产者和消费者进行解耦 . 可以得到更加顺畅的配合.
什么是生产者消费者模式生产者消费者 会利用一个容器 . 一旦生产者生产了产品, 就会通知消费者去消费产品. 一旦消费者消费了产品 就会通知生产者去生产产品
生产者消费者设计模式 是wait和notify的一大用途. 如下的代码中, 用wait和notify的替换, 实现了生产者消费者模式.
put方法用于生产者. 该方法的逻辑是首先判断容器的容量是否达到了仓库的最大容量,如果是的, 那么就调用wait, 让消费者去消费. 如果仓库还没满, 那么就进行生产, 生产完了之后, 就调用notify去唤醒消费者线程.
take方法的逻辑是首先判断容器中的产品容量是否为0 ,如果是0 , 那么就调用wait进入等待状态, 等待生产者唤醒. 如果容器中 的产品容量不是0 , 那么就消费产品,并且唤醒生产者, 去生产产品.
创建生产者和消费者两个线程, 分别去调用put和take方法. 去生产和消费.
package com.thread.threadobjectclasscommonmethods;
import java.util.Date;
import java.util.LinkedList;
/**
* 类名称:ProducerConsumerModel
* 类描述: 用wait/notify 来实现生产者 消费者模型
*
* @author: https://javaweixin6.blog.csdn.net/
* 创建时间:2020/8/29 18:59
* Version 1.0
*/
public class ProducerConsumerModel {
public static void main(String[] args) {
EventStorage eventStorage = new EventStorage();
Producer producer = new Producer(eventStorage);
Consumer consumer = new Consumer(eventStorage);
new Thread(producer).start();
new Thread(consumer).start();
}
}
/**
* 生产者
*/
class Producer implements Runnable {
private EventStorage storage;
public Producer(EventStorage storage) {
this.storage = storage;
}
@Override
public void run() {
for (int i = 0; i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?