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