ArrayBlockingQueue原始碼解析

2021-10-01 09:39:12 字數 929 閱讀 5130

先說下 put 和 take 這2個 會讓執行緒 處於watting狀態的方法

arraybockingqueue 是基於 陣列 和 讀寫指標

還有 condition 實現的 condition 是aqs的內部類

aqs 內部類中 node 可以理解為 物件監視器monitor中的 entry set 入口集

而condition 可以理解為 wait set 等待集

不過 condition 是可以允許有多個的。

[node 也是condition的實現 只不過是單向鍊錶而 clh 同步佇列是 雙向鍊錶]

其中子所以有2個 條件等待 佇列 是因為 在同步佇列clh佇列上 等待喚醒的節點

有可能是 take 也有可能是put 如果 unlock 喚醒 nextnode.thread 的話

有可能put滿了 還是put的執行緒 那麼 為了防止這樣出現 所以

做乙個where 判斷 如果put滿了 那麼從 clh佇列 加入 put condition 然後又 從

put condition 移到 clh 佇列 等待喚醒

public

void

put(e e)

throws interruptedexception

finally

}

private

void

enqueue

(e x)

// 這幾個方法都一樣 沒什麼好說的了

public e take()

throws interruptedexception

finally

}

private e dequeue()

azkaban web server原始碼解析

azkaban主要用於hadoop相關job任務的排程,但也可以應用任何需要排程管理的任務,可以完全代替crontab。azkaban主要分為web server 任務上傳,管理,排程 executor server 接受web server的排程指令,進行任務執行 1.資料表 projects 工...

JDK LinkedHashMap原始碼解析

今天來分析一下jdk linkedhashmap的源 public class linkedhashmapextends hashmapimplements map可以看到,linkedhashmap繼承自hashmap,並且也實現了map介面,所以linkedhashmap沿用了hashmap的大...

Redux原始碼createStore解讀常用方法

const store createstore reducer,preloadedstate enhancer 直接返回當前currentstate,獲取state值,return state 我覺得應該深轉殖乙個新的物件返回,不然有可能會被外部修改 function getstate consol...