先說下 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...