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();
- }
- }
- }
使用場景:
如果你在頁面做某一個操作,需要對所有區域或者某種類型相同的用戶發送消息(即需要插入很多條消息數據)
有可能會很慢,那么我們就可以用隊列來做,將用戶提交的數據保存,然后將其他操作放入隊列中,然后立即返回用戶結果,由消息隊列異步進行這些操作。
