java隊列使用
Java知識總結----隊列的使用
操作方法
(01)首先我們要知道使用隊列的目的是什麼?一般情況下,如果是一些及時消息的處理,並且處理時間很短的情況下是不需要使用隊列的,直接阻塞式的方法調用就可以了。但是,如果在消息處理的時候特別費時間,這個時候如果有新的消息來了,就只能處於阻塞狀態,造成用戶等待。這個時候在項目中引入隊列是十分有必要的。當我們接受到消息後,先把消息放到隊列中,然後再用新的線程進行處理,這個時候就不會有消息的阻塞了。下面就跟大家介紹兩種隊列的使用,一種是基於內存的,一種是基於數據庫的。
(02)首先,我們來看看基於內存的隊列。在Java的併發包中已經提供了BlockingQueue的實現,比較常用的有ArrayBlockingQueue和LinkedBlockingQueue,前者是以數組的形式存儲,後者是以Node節點的鏈表形式存儲。至於數組和鏈表的區別這裏就不多說了。
(03)BlockingQueue 隊列常用的操作方法:1.往隊列中添加元素: add(), put(), offer()2.從隊列中取出或者刪除元素: remove() element() peek() pool() take()
(04)每個方法的說明如下:offer()方法往隊列添加元素如果隊列已滿直接返回false,隊列未滿則直接插入並返回true;add()方法是對offer()方法的簡單封裝.如果隊列已滿,拋出異常new IllegalStateException("Queue full");put()方法往隊列裏插入元素,如果隊列已經滿,則會一直等待直到隊列爲空插入新元素,或者線程被中斷拋出異常ve()方法直接刪除隊頭的元素:peek()方法直接取出隊頭的元素,並不刪除ent()方法對peek方法進行簡單封裝,如果隊頭元素存在則取出並不刪除,如果不存在拋出異常NoSuchElementException()pool()方法取出並刪除隊頭的元素,當隊列爲空,返回null;take()方法取出並刪除隊頭的元素,當隊列爲空,則會一直等待直到隊列有新元素可以取出,或者線程被中斷拋出異常offer()方法一般跟pool()方法相對應, put()方法一般跟take()方法相對應.日常開發過程中offer()與pool()方法用的相對比較頻繁.
(05)下面用一個例子來看看是怎麼使用的。
(06)以上呢,就是基於內存的隊列的介紹,基於內存的隊列,隊列的大小依賴於JVM內存的大小,一般如果是內存佔用不大且處理相對較爲及時的都可以採用此種方法。如果你在隊列處理的時候需要有失敗重試機制,那麼用此種隊列就不是特別合適了。下面就說說基於數據庫的隊列。基於數據庫的隊列,很好理解,就是接收到消息之後,把消息存入數據庫中,設定消費時間、重試次數等,再用新的線程從數據庫中讀取資訊,進行處理。首先來看看數據庫的設計。
(07)代碼示例如下:
(08)獲取到消息之後,還需要再判斷消息是否合法,如是否達到最大消費次數,消息是否已被成功消費,等,判斷代碼如下:
(09)消息處理完畢之後,根據消費結果修改數據庫中的狀態。
(10)下次消費時間的計算如下:根據消費次數計算,每次消費存在遞增的時間間隔。
(11)除此之外,對於消費完成,等待刪除的消息,可以將消息直接刪除或者是進行備份。最好不要在該表中保留太多需要刪除的消息,以免影響數據庫的查詢效率。我們在處理消息的時候,首先對消息進行了鎖定,設定了locker,如果系統出現異常的時候,也會產生消息一直處於被鎖定的狀態,此時可能還需要定期去修復被鎖定的消息。
(12)以上就是對兩種隊列的簡單說明。在使用基於數據庫的隊列的時候,其中還使用到了事件處理機制,這部分的內容,就下次的時候再去介紹。
-
485轉以太網怎麼設定
門禁考勤系統作爲控制人員出入,考覈工作人員考勤情況的數字化管理系統得到了廣泛的應用,對於公司管理工作具有積極的意義。由於RS-485總線使用簡單,方便易用,相當部分的門禁考勤系統使用的數據傳輸線路採用RS-485總線作爲其傳輸線路。對於處於同一棟辦公樓中的辦公...
-
如何刷京東單
京東商城下單方法,在京東商城刷單方法操作方法(01)首先開啟京東商城客戶端,在裏面找到自己想要購買的商品,然後點擊開啟商品,選擇購買件數單擊“加入購物車”(02)現在提示已經成功加入購物車,點擊購物車就可以進行付款了,點擊“購物車”(03)選中你要結算的物品,在前面對話框...
-
Python中如何應用split
我們用python處理字元串的時候經常會需要分割字元串,這個時候我們會用到split。那麼你真的會用它嗎?下面小編來給大家分享一下split的使用以及注意事項操作方法(01)首先我們在python環境中先來建立一個字元串,如下圖所示(02)然後我們調用split方法,已冒號作爲分隔符,如...
-
怎麼在qq空間製作騰訊認證圖標
在自己的空間添加騰訊認證圖標,圖標無法下載的找我拿QQ704396659操作方法(01)1.先下載【騰訊認證標識】:單擊右鍵,複製圖片就可以。。。(02)2.上傳空間:點擊“設定”(圖中標註的地方),再選擇“修改資料”,再選擇“空間資料”(在左下方)。接下來,讓空間名稱的前面留一個空格,用Q...