併發佇列總結

2022-03-27 18:32:39 字數 1027 閱讀 2839

併發queue

併發佇列在jdk提供了兩套實現,乙個是以concurrentlinkedqueue為代表的高效能佇列,乙個是以blockingqueue介面為代表的阻塞佇列,無論哪一種都會繼承queue介面。

comcurrentlinkedqueue

blockingqueue常用方法

offer:如果可能的話,將anobject加到blockingqueue裡,即如果blockingqueue可以容納,則返回ture,否則返回false。(本方法不阻塞當前執行的方法的執行緒)

offer(e o,long timeout,timeunit unit),可以設定等待的時間,如果在指定時間內,還不能往佇列裡加入blockingqueue,則返回失敗

put(anobject):把anobejct加入到blockingqueue裡,如果blockingqueue沒有空間,則呼叫此方法的執行緒被阻斷直到blockingqueue裡面有空間再繼續。

poll(long timeout,timeunit unit):從blockingqueue取出乙個對首的物件,如果在指定時間內,佇列一旦有資料可取,則立即返回佇列中的資料。否則知道時間超時還沒有資料可取,則返回失敗。

take():取走blockingqueue裡排在首位的物件,若blockingqueue為空,阻斷寫入等待狀態直到blockingqueue有新的資料被加入

drainto():一次性從blockingqueue獲取所有可用的資料物件(還可以指定獲取資料的個數),通過該方法,可以提公升獲取資料的效率,不需要多次分批加鎖或者釋放鎖。

arrayblockingqueue

基於陣列的阻塞佇列實現

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

linkedblockingqueue

synchronousqueue

priorityblockingqueue

deleyqueue

併發程式設計之併發佇列

jdk 中提供了一系列場景的併發安全佇列。總的來說,按照實現方式的不同可分為阻塞佇列和非阻塞佇列,前者使用鎖實現,而後者則使用cas 非阻塞演算法實現。1 非阻塞佇列 concurrentlinkedqueue concurrentlinkedqueue是無界非阻塞佇列,內部使用單項鍊表實現 其中有...

併發佇列Queue

乙個是以concurrentlinkedqueue為代表的高效能佇列,乙個是以blockingqueue為介面代表的阻塞佇列,都繼承自queue。concurrentlinkedqueue 是乙個適用高併發場景下的佇列,通過無鎖的方式,實現了高併發狀態下的高效能,通常concurrentlinged...

佇列併發訪問

最近在做乙個專案,涉及到佇列併發訪問的問題,最後通過.net4.0中的concurrent得以解決。使用該引用之前,先安裝.net4.0.應用舉例 using system.collections.concurrent concurrentqueuequeue new concurrentqueue...