到底什么是消息队列Java中如何实现消息队列

到底什么是消息队列Java中如何实现消息队列,第1张

消息队列,顾名思义

首先是个队列。

队列的 *** 作有入队和出队

也就是你有一个程序在产生内容然后入队(生产者)

另一个程序读取内容,内容出队(消费者)

这是最最基本的概念。

我想你应该是缺乏一个使用场景。

当你不需要立即获得结果,但是并发量又不能无限大的时候,差不多就是你需要使用消息队列的时候。

比如你写日志,因为可能一个客户端有多个 *** 作去写,又有很多个客户端,显然并发不能无穷大,于是你就需要把写日志的请求放入到消息队列里,在消费者那边依次把队列中产生的日志写到数据库里。

至于怎么实现消息队列,其实你本身一个普通的队列就行呀~看你需要什么附加功能而已。

链队列的定义:

队列的链式存储结构简称为链队列。它是限制仅在表头删除和表尾插入的单链表。

链队列的数据存储形式:

链队列基本运算的实现:

[java] view plain copy

package study_02datastructurequeue;

/

链队列

@author WWX

/

public class LinkQueue<T> {

//链的数据结构

private class Node{

public T data;

public Node next;

//无参构造函数

public Node(){}

public Node(T data,Node next){

thisdata=data;

thisnext=next;

}

}

//队列头指针

private Node front;

//队列尾指针

private Node rear;

//队列长度

private int size=0;

public LinkQueue(){

Node n=new Node(null,null);

nnext=null;

front=rear=n;

}

/

队列入队算法

@param data

@author WWX

/

public void enqueue(T data){

//创建一个节点

Node s=new Node(data,null);

//将队尾指针指向新加入的节点,将s节点插入队尾

rearnext=s;

rear=s;

size++;

}

/

队列出队算法

@return

@author WWX

/

public T dequeue(){

if(rear==front){

try {

throw new Exception("堆栈为空");

} catch (Exception e) {

eprintStackTrace();

}

return null;

}else{

//暂存队头元素

Node p=frontnext;

T x=pdata;

//将队头元素所在节点摘链

frontnext=pnext;

//判断出队列长度是否为1

if(pnext==null)

rear=front;

//删除节点

p=null;

size--;

return x;

}

}

/

队列长队

@return

@author WWX

/

public int size(){

return size;

}

/

判断队列是否为空

@return

@author WWX

/

public boolean isEmpty(){

return size==0;

}

public String toString() {

if(isEmpty()){

return "[]";

}else{

StringBuilder sb = new StringBuilder("[");

for(Node current=frontnext;current!=null;current=currentnext){

sbappend(currentdatatoString() + ", ");

}

int len = sblength();

return sbdelete(len - 2, len)append("]")toString();

}

}

//测试

public static void main(String[] args) {

LinkQueue<Integer> queue=new LinkQueue<Integer>();

queueenqueue(1);

queueenqueue(2);

queueenqueue(3);

queueenqueue(4);

queueenqueue(5);

queueenqueue(6);

Systemoutprintln(queue);

Systemoutprintln("出队:"+queuedequeue());

Systemoutprintln("队列长度="+queuesize());

Systemoutprintln(queue);

Systemoutprintln("出队:"+queuedequeue());

Systemoutprintln("队列长度="+queuesize());

Systemoutprintln(queue);

Systemoutprintln("出队:"+queuedequeue());

Systemoutprintln("队列长度="+queuesize());

Systemoutprintln(queue);

}

}

输出结果:

[1, 2, 3, 4, 5, 6]

出队:1

队列长度=5

[2, 3, 4, 5, 6]

出队:2

队列长度=4

[3, 4, 5, 6]

出队:3

队列长度=3

[4, 5, 6]

你这个只是进队 如果队列满了 只是会打印溢出,并不会对数组integerQueue有任何的影响,所以当 1 2 3 4 5的时候,进来的6并不会加入队列里面。如果出队列你改变的并不是数组,而只是tail,

所以当 队列是 1 2 3 4 5 的时候,出队列了,只是让tail改成3,但是整个数组的长度还是5,所以打印数组的时候还是 1 2 3 4 5

你可以在打印的时候 for(int i=0;i<integerQueuelength;i++)改for(inti=0;i<=tail;i++);

以上就是关于到底什么是消息队列Java中如何实现消息队列全部的内容,包括:到底什么是消息队列Java中如何实现消息队列、java:编写数据访问接口,再分别以堆栈和队列的形式实现、java编写的队列,网上给出的答案我有些迷惑!!!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10180385.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存