堆,阻塞佇列,優先順序佇列

2021-10-09 08:39:23 字數 801 閱讀 1316

arrayblockingqueue  :

linkedblockingqueue (integer.max_value) 

synchronusqueue(無鎖,不儲存元素)

concurrentlinkedqueue (無鎖)

非阻塞,不能用於執行緒池,執行緒安全, 無界,入隊不用等待

cas(不用切換執行緒上下文,樂觀鎖)  長期占用cpu

head

tail :指向最後乙個或者倒數第二個節點

平均入隊兩次tail移動一次,提高效能

1、priorityblockingqueue

陣列,執行緒安全,排序(取元素的時候有序,出的是最大或最小,儲存沒有順序),無界

comparator:不設定就是自然順序

擴容釋放鎖的原因:防止阻塞太多執行緒,釋放鎖後,擴容使用自旋保證只有乙個執行緒可以擴容

2、priorityqueue

非執行緒安全,陣列,無界,

入隊不阻塞

3、delayqueue

阻塞,執行緒安全

存放的屬性必須實現delayed介面

delayed : 定義元素的過期時間

基於優先順序佇列實現

leader : 取元素的時候判斷是否為空,不為空有執行緒阻塞。

4、heap    

滿(節點數量最大)二叉樹:每一層節點的數量都是滿的

完全二叉樹:除開最後一層,其他層都是滿的

堆:頂部元素最大或者最小(小頂堆,大頂堆),

陣列第乙個元素為空:快速根據子節點的下標快速找到父節點的位置 : index/2 = 父節點下標

堆(優先順序佇列)

c 的 stl 中提供了 優先佇列 這一容器,它和普通的 fifo 佇列都定義在 中,有 push 和 pop 過程,分別表示 往佇列裡加入新元素 和 從佇列裡刪除隊首元素 唯一的區別是,在優先佇列中,元素並不是按照進入佇列的先後順序排列,而是按照優先順序的高低順序排列 換句話說,pop 刪除的是優...

堆 優先順序佇列

1一般二叉樹的順序儲存 層序遍歷方式 使用陣列儲存二叉樹結構,即將二叉樹 按照層序遍歷 的方式放入陣列.這種方式一般只適用於完全二叉樹,一般的二叉樹會造成空間浪費比較嚴重.2堆 heap 在邏輯上就是乙個 完全二叉樹,在物理上儲存在 陣列 中.1 滿足任意結點的值都大於其子樹的結點的值.叫做大堆,反...

優先順序佇列 堆

1.1 堆的概念 堆邏輯上是一棵完全二叉樹 堆物理上是儲存在陣列中位元科技 滿足任意結點的值都大於其子樹中結點的值,叫做大堆,或者大根堆,或者最大堆 反之,則是小堆,或者小根堆,或者最小堆 堆的基本作用是,快速找集合中的最值 1.2儲存方式 使用陣列儲存二叉樹結構,方式是將二叉樹用層序遍歷方式放入陣...