併發佇列Queue

2021-07-28 09:27:58 字數 1273 閱讀 5464

乙個是以concurrentlinkedqueue為代表的高效能佇列,乙個是以blockingqueue為介面代表的阻塞佇列,都繼承自queue。

concurrentlinkedqueue:是乙個適用高併發場景下的佇列,通過無鎖的方式,實現了高併發狀態下的高效能,通常concurrentlingedqueue效能好於blockingqueue。它是乙個基於鏈結節點的無界線程安全佇列。該佇列的元素遵循先進先出的原則。不允許null元素。

concurrentlinkedqueue重要方法:

add()和offer()都是加入元素的方法(在concurrentlinkedqueue中,這倆個方法沒有任何區別)

poll()和peek()都是取頭元素節點,前者會刪除元素,後者不會。

arrayblockingqueue:基於陣列的阻塞佇列實現,在arrayblockingqueue內部,維護了乙個定長陣列,以便快取佇列中的資料物件,其內部沒實現讀寫分離,也就是意味著生產和消費不能完全並行,長度是需要定義的,可以指定先進先出或者先進後出,也叫有界佇列,在很多場合非常適合使用。

linkedblockingqueue:基於鍊錶的阻塞佇列,同arrayblockingqueue類似,其內部也維護著乙個資料緩衝佇列(該佇列由乙個鍊錶構成),linkedblockingqueue之所以能夠高效的處理併發資料,是因為其內部實現採用分離鎖(讀寫分離兩個鎖), 從而實現生產者和消費者操作的完全並行執行。他是乙個無界佇列。

synchronousqueue:一種沒有緩衝的佇列,生產者產生的資料直接會被消費者獲取並消費。

執行緒a呼叫take()方法沒有資料等待,執行緒b呼叫add()方法新增資料(如果無線程呼叫take,就會報錯),直接被執行緒a取走。

priorityblockingqueue:基於優先順序的阻塞佇列(優先順序的判斷通過建構函式傳入的compator物件來決定,也就是說傳入佇列的物件必須實現comparable介面),在實現priorityblockingqueue時,內部控制線程同步的鎖採用的是公平鎖,他也是乙個無界的佇列。

delayqueue:帶有延遲時間的queue,其中的元素只有當其指定的延遲時間到了,才能夠從佇列中獲取到該元素。delayqueue中的元素必須實現delayed介面,delayqueue是乙個沒有大小限制的佇列,應用場景很多,比如對快取超時的資料進行移除、任務超時處理、空間連線的關閉等等。

queue的長度 佇列 Queue

佇列 queue 是先進先出 fifo,first in first out 的線性表。在具體應用中通常用鍊錶或者陣列來實現。佇列只允許在後端 稱為rear 進行插入操作,在前端 稱為front 進行刪除操作。隊結構 迴圈佇列可以更簡單防止偽溢位 假溢位 的發生,但佇列大小是固定的。防止假溢位,如d...

佇列(queue)原理

像棧一樣,佇列 queue 也是一種線性表,它的特性是先進先出,插入在一端,刪除在另一端。就像排隊一樣,剛來的人入隊 push 要排在隊尾 rear 每次出隊 pop 的都是隊首 front 的人。如圖1,描述了乙個佇列模型。佇列 queue 與棧一樣,是一種線性儲存結構,它具有如下特點 佇列中的資...

佇列 queue詳解

一.queue模版類的定義在標頭檔案中。queue與stack模版非常類似,queue模版也需要定義兩個模版引數,乙個是元素型別,乙個是容器型別,元素型別是必要的,容器型別是可選的,預設為dqueue型別。定義queue物件的示例 如下 queueq1 queueq2 queue的基本操作有 1.入...