消息队列,阻塞队列的实现

发布于:2025-03-18 ⋅ 阅读:(15) ⋅ 点赞:(0)

简介

消息队列 (Message Queue, MQ) 是一种在分布式系统中用于异步通信的中间件。它允许不同应用程序或服务通过发送消息与接收消息交换数据,而且无需直接相互依赖

核心概念

生产者:负责创建并发送消息到消息队列
消息队列:储存消息的缓冲区,基于阻塞队列的实现基底
消费者:从消息队列接收消息并执行

工作流程

1.生产者将消息发送到消息队列。
2.消息队列存储消息,直到有消费者准备好处理它。
3.消费者从消息队列中获取消息并进行处理。
4.处理完成后,消费者可以确认消息已被成功处理,消息队列将其删除。

阻塞队列的实现

public class MyBlockingDeque {
    private int[]elem;
    public MyBlockingDeque(int space) {
        if(space<=0) {
            throw new RuntimeException();
        }
        else elem=new int[space];

    }
    private volatile int head=0;//头下标
    private volatile int tail=0;//尾下标
    private volatile int size=0;//数组有效个数

    public void put(int value) throws InterruptedException {
        synchronized (this) {
            if (size >= elem.length) {
                //阻塞,使其等待 this当前这个

                this.wait();
            }
            elem[tail] = value;
            tail++;
            if (tail == elem.length) {
                tail = 0;
            }
            size++;
        }
    }
    public synchronized Integer take() throws InterruptedException {
        if(size==0){
            this.wait();
        }
        Integer key=elem[head];
        head++;
        if(head==elem.length){
            head=0;
        }
        size--;
        //唤醒阻塞等待线程
            this.notifyAll();
        return key;
    }
}

在这里插入图片描述
在这里插入图片描述

消息队列的优点

1.解耦:生产者与消费者之间不需要直接了解对方,降低了系统之间的依赖性
2.异步:生产者发送消息不需要等消费者执行完,提高了系统的响应速度
3.削峰填谷:在高并发下,消息队列可以缓冲请求,防止系统过载
4.可靠性:消息队列通常具有持久化机制,可以保证消息不会丢失
5.可以方便地增加生产者和消费者,扩展系统的处理能力。
6.某些消息队列可以保证消息的顺序性,即按照发送的顺序进行处理。


网站公告

今日签到

点亮在社区的每一天
去签到