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