1.为什么要用队列
假设你的服务器每分钟的处理量为1000个,但客户端再峰值的时候可能一分钟会发10000个消息给你,这时候你就可以把他做成队列,然后按正常有序的处理,
先进后出(LIFO),先进先出(FIFO)可根据自己的情况进行定夺
stack 先进后出(LIFO)--------Java 对应的类 Stack
队列 先进先出(FIFO)--------java对应的类Queue
2。简单java实现(用Linkedlist封装实现)
栈类
- public class MyStack<T> {
- private LinkedList<T> storage = new LinkedList<T>();
- public synchronized void push(T e) {//需要加上同步
- storage.addFirst(e);
- }
- public T peek() {
- return storage.getFirst();
- }
- public void pop() {
- storage.removeFirst();
- }
- public boolean empty() {
- return storage.isEmpty();
- }
- @Override
- public String toString() {
- return storage.toString();
- }
- }
测试类
- ublic class StackTest {
- public static void main(String[] args) {
- MyStack<String> stack = new MyStack<String>();
- for(String s : "the prefect code".split(" ")){//LIFO
- stack.push(s);
- }
- while(!stack.empty()){
- System.out.print(stack.peek()+" ");
- stack.pop();
- }
- System.out.println();
- for(char s : "写了个一句话倒起来说的程序".toCharArray()){//用例:正话反说
- stack.push(String.valueOf(s));
- }
- while(!stack.empty()){
- System.out.print(stack.peek());
- stack.pop();
- }
- }
- }
使用场景:
如果你在页面做某一个操作,需要对所有区域或者某种类型相同的用户发送消息(即需要插入很多条消息数据)
有可能会很慢,那么我们就可以用队列来做,将用户提交的数据保存,然后将其他操作放入队列中,然后立即返回用户结果,由消息队列异步进行这些操作。