您当前的位置: 首页 >  Java

java持续实践

暂无认证

  • 1浏览

    0关注

    746博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Java多线程 手写生产者消费者设计模式

java持续实践 发布时间:2020-08-29 19:49:13 ,浏览量:1

文章目录
      • 为什么使用生产者和消费者模式
      • 什么是生产者消费者模式
      • 用wait和notify 实现 生产者消费者设计模式

为什么使用生产者和消费者模式

生产者用于生产数据, 消费者用于消费数据. 可能出现的情况是生产者生产的数据过慢,导致了消费者一直等待. 也可能消费者消费的过慢, 让生产者一直等待去生产. 于是就诞生了生产者 消费者模式, 让生产者和消费者进行解耦 . 可以得到更加顺畅的配合.

什么是生产者消费者模式

生产者消费者 会利用一个容器 . 一旦生产者生产了产品, 就会通知消费者去消费产品. 一旦消费者消费了产品 就会通知生产者去生产产品

用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             
关注
打赏
1658054974
查看更多评论
0.1291s