JDK8 new ReentrantLock((true)加鎖流程
更新時間:2023年07月06日 10:35:35 作者:子瞻
這篇文章主要介紹了java面試中常遇到的問題JDK8 new ReentrantLock((true)加鎖流程示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
new ReentrantLock(true)加鎖流程
protected final boolean tryAcquire(int acquires) {
//獲取當(dāng)前線程
final Thread current = Thread.currentThread();
//獲取state值
int c = getState();
//還沒有線程占用
if (c == 0) {
//!(頭節(jié)點和尾節(jié)點不是一個節(jié)點 && (頭節(jié)點的next -> NULL 或者 頭節(jié)點.next節(jié)點 不是 當(dāng)前線程 ))
//也就是說,頭尾是一個節(jié)點 或者 頭節(jié)點.next節(jié)點的線程是當(dāng)前線程
if (!hasQueuedPredecessors() &&
//cas 0 -> 1
compareAndSetState(0, acquires)) {
/設(shè)置獨占線程
setExclusiveOwnerThread(current);
return true;
}
}
//當(dāng)前線程等于獨占線程
else if (current == getExclusiveOwnerThread()) {
//state值+1
int nextc = c + acquires;
if (nextc < 0)
throw new Error("Maximum lock count exceeded");
//重新賦值 state 值
setState(nextc);
return true;
}
//否則返回false
return false;
}如果獲得鎖失敗,和JDK8 new ReentrantLock()加鎖流程中流程一樣!
以上就是JDK8 new ReentrantLock((true)加鎖流程的詳細內(nèi)容,更多關(guān)于JDK8 new ReentrantLock的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Spring Boot整合mybatis并自動生成mapper和實體實例解析
本文是小編給大家總結(jié)的關(guān)于Spring Boot整合mybatis并自動生成mapper和實體的內(nèi)容,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧2018-05-05
Spring調(diào)度框架EnableScheduling&Scheduled源碼解析
這篇文章主要介紹了Spring調(diào)度框架EnableScheduling&Scheduled源碼解析,@EnableScheduling&Scheduled定時調(diào)度框架,本著不僅知其然還要知其所以然的指導(dǎo)思想,下面對該調(diào)度框架進行源碼解析,以便更好的理解其執(zhí)行過程,需要的朋友可以參考下2024-01-01
關(guān)于在Springboot中集成unihttp后應(yīng)用無法啟動的解決辦法
本文主要介紹了在SpringBoot項目中集成UniHttp框架時遇到的無法啟動問題,并提供了解決方法,作者通過詳細記錄和分析問題,希望為其他開發(fā)者提供有價值的參考和借鑒,感興趣的朋友跟隨小編一起看看吧2025-03-03
關(guān)于Spring的統(tǒng)一功能處理(攔截器)實現(xiàn)
這篇文章主要介紹了關(guān)于Spring的統(tǒng)一功能處理(攔截器)實現(xiàn),每個方法中都要單獨寫用戶登錄驗證的方法,即使封裝成公共方法,也一樣要傳參調(diào)用和在方法中進行判斷,需要的朋友可以參考下2023-05-05

