一、问题背景
有这种场景:当某一些消息由服务器发送到后台时,往往是在一个回调函数中获取。我们如何从回调函数中获取它并可以由不同的个体创建不同的队列,再将实时获取的消息推送出去呢?
二、方案雏形
一般来说,我们用一个队列存储取得的回调消息,然后在其他我们需要的地方从这个队列中取出消息,由此可以知道需要这么做:
1、这个队列由于经常增减,应该是链表形式的
2、这个队列应该只有一个实例,这样才能在其他地方取出消息
3、当存在多条消息同时向队列存入的情况时,它应该保持原子性
以下代码来自这篇博客:https://blog.csdn.net/weixin_40035204/article/details/80094352?utm_source=blogxgwz2
由此我们可以用以下这种方式解决:
/**
* @author LiHang
* @date 2020-09-08
* @description 用于存储消息的缓存队列,可将mqtt回调类的消息传递给用户
*/
public class MessageQueue {
private static final Logger log = LoggerFactory.getLogger(MessageQueue.class);
private LinkedList<String> list = new LinkedList<String>();
private int size = 0;
private static MessageQueue instance;
/**
* 初始化方法,确保只存在一个类实例
*/
public static synchronized MessageQueue getInstance(){
if (instance == null){
instance = new MessageQueue();
}
return instance;
}
/**
* 添加一条