Java數據結構系列(5)——隊列Queue常用方法


  今天跟大家來看看如何在項目中使用隊列。首先我們要知道使用隊列的目的是什么?一般情況下,如果是一些及時消息的處理,並且處理時間很短的情況下是不需要使用隊列的,直接阻塞式的方法調用就可以了。但是,如果在消息處理的時候特別費時間,這個時候如果有新的消息來了,就只能處於阻塞狀態,造成用戶等待。這個時候在項目中引入隊列是十分有必要的。當我們接受到消息后,先把消息放到隊列中,然后再用新的線程進行處理,這個時候就不會有消息的阻塞了。下面就跟大家介紹兩種隊列的使用,一種是基於內存的,一種是基於數據庫的。

     首先,我們來看看基於內存的隊列。在Java的並發包中已經提供了BlockingQueue的實現,比較常用的有ArrayBlockingQueue和LinkedBlockingQueue,前者是以數組的形式存儲,后者是以Node節點的鏈表形式存儲。至於數組和鏈表的區別這里就不多說了。

Queue 隊列常用的操作方法:

  • 往隊列中添加元素: add(), put(), offer()
  • 從隊列中取出或者刪除元素: remove() element()  peek()   pool()  take()

每個方法的說明如下:

     offer():往隊列添加元素。如果隊列已滿直接返回false,隊列未滿則直接插入並返回true;

  add():對offer()方法的簡單封裝。如果隊列已滿,拋出異常new IllegalStateException("Queue full");

  put():往隊列里插入元素,如果隊列已經滿,則會一直等待直到隊列為空插入新元素,或者線程被中斷拋出異常.

       remove():直接刪除隊頭的元素;

       peek():直接取出隊頭的元素,並不刪除。

       element():對peek方法進行簡單封裝,如果隊頭元素存在則取出並不刪除,如果不存在拋出異常NoSuchElementException();

       pool():取出並刪除隊頭的元素,當隊列為空,返回null;

       take():取出並刪除隊頭的元素,當隊列為空,則會一直等待直到隊列有新元素可以取出,或者線程被中斷拋出異常

說明:offer()方法一般跟pool()方法相對應,put()方法一般跟take()方法相對應。日常開發過程中offer()與pool()方法用的相對比較頻繁。

————————————————
版權聲明:本文為CSDN博主「在遠行的路上」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/lzy_lizhiyang/article/details/48311925


免責聲明!

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



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