ReetrantLock鎖原始碼解析

2021-09-26 02:25:31 字數 655 閱讀 8032

(非)公平鎖加鎖主要方法解析:

protected final boolean tryacquire(int acquires)

}else if (current == getexclusiveownerthread()) //判斷是否是可重入的

//加鎖失敗

return false;

}private node addwaiter(node mode)

}//新建不帶引數的頭結點並且賦值於尾節點,然後將node追加到尾節點

enq(node);

return node;

}final boolean acquirequeued(final node node, int arg)

//將waitstatus的值從0更新為-1,注意,這裡更新的是前一節點的狀態值,在解鎖時用到

if (shouldparkafte***iledacquire(p, node) &&

parkandcheckinterrupt()) //設定鎖並且檢查interrupt

interrupted = true;

}} finally

}2.非公平鎖主要是在獲取鎖時去競爭鎖,其它和公平鎖原理一樣,因此非公平鎖並不是隨機喚醒乙個執行緒,而是在加鎖時有機會獲取到鎖,一旦進入佇列那只能一直排隊。

AbstractCollection原始碼分析

abstractcollection抽象類提供了collection的骨架實現,collection分析請看 這裡直接看它的 是如何實現的.public abstract iterator iterator 該方法沒有實現.public abstract int size 該方法沒有實現.publi...

ThreadPoolExecutor原始碼閱讀

執行緒池解決兩個問題 一是復用執行緒,減少建立銷毀執行緒帶來系統開銷 二是限定系統資源使用邊界,避免大量執行緒消耗盡系統記憶體 適用於互不依賴,執行時間短,不需要對執行緒控制操作的執行緒 新增任務時,1.若執行緒數量小於corepoolsize,則新增執行緒執行任務 2.若執行緒數量大於等於core...

OrangePi One Android 原始碼編譯

一 系統環境搭建參照 二 lichee原始碼編譯 1.檢視help build.sh h2.配置核心 cd linux 3.4 make arch arm menuconfig 進入配置頁面,上下移動列表,空格是選擇列表,左右移動選擇退出選項 3.首次編譯執行清除 在 lichee linux3.4...