多執行緒程式設計 三

2021-09-05 09:17:19 字數 1219 閱讀 5293

放入資料:

獲取資料:

arrayblockingqueu 和 linkedblockingqueue

arrayblockingqueu:是用陣列實現的有界阻塞佇列,並按照先進先出(fifo)的原則對元素進行排序。

//第乙個引數是容量    第二個引數是是否要保證執行緒的公平地訪問佇列(預設是false)

arrayblockingqueue arrayblockingqueue = new arrayblockingqueue(200,true);

linkedblockingqueue: 是基於鍊錶的阻塞佇列,同 arrayblockingqueu類似。

那他們區別在哪?

一般情況下,在處理多執行緒間的生產者-消費者問題是,使用這兩個就可以。

priorityblockingqueue

它是乙個支援優先順序的無界佇列。預設情況下元素採取自然順序公升序排列。這裡可以自定義實現 compareto() 方法來指定元素進行排序規則;或者初始化 priorityblockingqueue 時,指定構造引數 comparator 來對元素進行排序。但其不能保證同優先順序元素的排序。

delayqueue

它是乙個支援延時獲取元素的無界阻塞佇列。佇列使用 priorityblockingqueue 來實現。 佇列中的元素必須實現 delayed 介面。建立元素是,可以指定元素到期的時間,只有在元素到期時才能從佇列中取走。

synchronousqueue

它是乙個不儲存元素的阻塞佇列。每個插入操作必須等待另乙個執行緒的移除操作,同樣任何乙個移除操作都等待另乙個執行緒的插入操作。

linkedtransferqueue

它是乙個有鍊錶結構組成的無界阻塞 transferqueue 佇列。linkedtransferqueue 實現乙個重要的介面 transferqueue 。該介面含有5個方法,其中有3個重要的方法。分別是:

linkedblockingdeque

它是乙個有鍊錶結構組成的雙向阻塞佇列。雙向佇列可以從佇列的兩端插入和移出元素,因此在多執行緒同時入隊時,也就減少了一半的競爭。由於時雙向的,因此 linkedblockingdeque 多了 addfirst、 addlast、 offerfirst、offerlast、peekfirst、peeklast 等方法,其中,以 first單詞結尾的方法,表示插入、獲取或移除雙端佇列的第乙個元素;以 last單詞結尾的方法,表示插入、獲取或移除雙端佇列的最後乙個元素。

多執行緒程式設計(三)

1 執行緒池 防止大量執行非同步任務時,頻繁的建立和銷毀執行緒物件帶來的系統開銷 根據執行緒池型別的不同可以有效防止系統中的執行緒資源消耗過多 2 執行緒池核心引數 corepoolsize 執行緒池核心執行緒個數 包括空閒執行緒 maximunpoolsize 執行緒池中線程的最大數量 workq...

多執行緒程式設計(三)

條件變數 mutex my mutex condition variable my cond unique lockul my mutex mycond.wait ul,lambda表示式或者可呼叫物件 條件變數需要繫結到unique lock上,wait的作用是,如果第二個引數的返回值是true,...

Linux 多執行緒程式設計(三)

繼續昨天的執行緒同步,條件變數 condition variables 是用於執行緒間,通訊共享資料狀態改變的機制。簡介條件變數的建立和銷毀 等待條件變數 喚醒等待條件變數的執行緒 簡介 當執行緒互斥地訪問一些共享的狀態時,往往會有些執行緒需要等到這些狀態改變後才應該繼續執行。如 有乙個共享的佇列,...