java 消息隊列 實例


1.為什么要用隊列

假設你的服務器每分鍾的處理量為1000個,但客戶端再峰值的時候可能一分鍾會發10000個消息給你,這時候你就可以把他做成隊列,然后按正常有序的處理,

先進后出(LIFO),先進先出(FIFO)可根據自己的情況進行定奪

stack  先進后出(LIFO)--------Java 對應的類 Stack

隊列 先進先出(FIFO)--------java對應的類Queue

2。簡單java實現(用Linkedlist封裝實現)

  棧類

  1. public class MyStack<T> {  
  2.     private LinkedList<T> storage = new LinkedList<T>();  
  3.   
  4.     public synchronized void push(T e) {//需要加上同步  
  5.         storage.addFirst(e);  
  6.     }  
  7.   
  8.     public T peek() {  
  9.         return storage.getFirst();  
  10.     }  
  11.   
  12.     public void pop() {  
  13.         storage.removeFirst();  
  14.     }  
  15.   
  16.     public boolean empty() {  
  17.         return storage.isEmpty();  
  18.     }  
  19.   
  20.     @Override  
  21.     public String toString() {  
  22.         return storage.toString();  
  23.     }  
  24.   
  25. }  

  測試類

  

  1. ublic class StackTest {  
  2.     public static void main(String[] args) {  
  3.         MyStack<String> stack = new MyStack<String>();  
  4.         for(String s : "the prefect code".split(" ")){//LIFO  
  5.             stack.push(s);  
  6.         }  
  7.         while(!stack.empty()){  
  8.             System.out.print(stack.peek()+" ");  
  9.             stack.pop();  
  10.         }  
  11.           
  12.         System.out.println();  
  13.         for(char s : "寫了個一句話倒起來說的程序".toCharArray()){//用例:正話反說  
  14.             stack.push(String.valueOf(s));  
  15.         }  
  16.         while(!stack.empty()){  
  17.             System.out.print(stack.peek());  
  18.             stack.pop();  
  19.         }  
  20.     }  
  21. }  

  使用場景:

  如果你在頁面做某一個操作,需要對所有區域或者某種類型相同的用戶發送消息(即需要插入很多條消息數據)

  有可能會很慢,那么我們就可以用隊列來做,將用戶提交的數據保存,然后將其他操作放入隊列中,然后立即返回用戶結果,由消息隊列異步進行這些操作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM