JDK8 new ReentrantLock((true)加鎖流程
new ReentrantLock(true)加鎖流程
protected final boolean tryAcquire(int acquires) {
//獲取當(dāng)前線程
final Thread current = Thread.currentThread();
//獲取state值
int c = getState();
//還沒(méi)有線程占用
if (c == 0) {
//!(頭節(jié)點(diǎn)和尾節(jié)點(diǎn)不是一個(gè)節(jié)點(diǎn) && (頭節(jié)點(diǎn)的next -> NULL 或者 頭節(jié)點(diǎn).next節(jié)點(diǎn) 不是 當(dāng)前線程 ))
//也就是說(shuō),頭尾是一個(gè)節(jié)點(diǎn) 或者 頭節(jié)點(diǎn).next節(jié)點(diǎn)的線程是當(dāng)前線程
if (!hasQueuedPredecessors() &&
//cas 0 -> 1
compareAndSetState(0, acquires)) {
/設(shè)置獨(dú)占線程
setExclusiveOwnerThread(current);
return true;
}
}
//當(dāng)前線程等于獨(dú)占線程
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)加鎖流程的詳細(xì)內(nèi)容,更多關(guān)于JDK8 new ReentrantLock的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Spring Boot整合mybatis并自動(dòng)生成mapper和實(shí)體實(shí)例解析
本文是小編給大家總結(jié)的關(guān)于Spring Boot整合mybatis并自動(dòng)生成mapper和實(shí)體的內(nèi)容,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-05-05
Spring調(diào)度框架EnableScheduling&Scheduled源碼解析
這篇文章主要介紹了Spring調(diào)度框架EnableScheduling&Scheduled源碼解析,@EnableScheduling&Scheduled定時(shí)調(diào)度框架,本著不僅知其然還要知其所以然的指導(dǎo)思想,下面對(duì)該調(diào)度框架進(jìn)行源碼解析,以便更好的理解其執(zhí)行過(guò)程,需要的朋友可以參考下2024-01-01
關(guān)于在Springboot中集成unihttp后應(yīng)用無(wú)法啟動(dòng)的解決辦法
本文主要介紹了在SpringBoot項(xiàng)目中集成UniHttp框架時(shí)遇到的無(wú)法啟動(dòng)問(wèn)題,并提供了解決方法,作者通過(guò)詳細(xì)記錄和分析問(wèn)題,希望為其他開(kāi)發(fā)者提供有價(jià)值的參考和借鑒,感興趣的朋友跟隨小編一起看看吧2025-03-03
SpringBoot無(wú)法訪問(wèn)webapp目錄下的文件問(wèn)題
這篇文章主要介紹了SpringBoot無(wú)法訪問(wèn)webapp目錄下的文件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
關(guān)于Spring的統(tǒng)一功能處理(攔截器)實(shí)現(xiàn)
這篇文章主要介紹了關(guān)于Spring的統(tǒng)一功能處理(攔截器)實(shí)現(xiàn),每個(gè)方法中都要單獨(dú)寫(xiě)用戶登錄驗(yàn)證的方法,即使封裝成公共方法,也一樣要傳參調(diào)用和在方法中進(jìn)行判斷,需要的朋友可以參考下2023-05-05

