十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!

深入淺析ReentrantL中實(shí)現(xiàn)ock的原理?相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
1 synchronized和lock
1.1 synchronized的局限性
1.2 Lock簡(jiǎn)介
2 AQS
3 lock()與unlock()實(shí)現(xiàn)原理
3.1 基礎(chǔ)知識(shí)
3.2 內(nèi)部結(jié)構(gòu)
3.3 NonfairSync
3.3.1 lock()
3.3.2 unlock()
3.3.3 小結(jié)
3.4 FairSync
4 超時(shí)機(jī)制
5 總結(jié)
1 synchronized和lock
1.1 synchronized的局限性
synchronized是java內(nèi)置的關(guān)鍵字,它提供了一種獨(dú)占的加鎖方式。synchronized的獲取和釋放鎖由JVM實(shí)現(xiàn),用戶不需要顯示的釋放鎖,非常方便。然而synchronized也有一定的局限性,例如:
當(dāng)線程嘗試獲取鎖的時(shí)候,如果獲取不到鎖會(huì)一直阻塞。
如果獲取鎖的線程進(jìn)入休眠或者阻塞,除非當(dāng)前線程異常,否則其他線程嘗試獲取鎖必須一直等待。
JDK1.5之后發(fā)布,加入了Doug Lea實(shí)現(xiàn)的concurrent包。包內(nèi)提供了Lock類,用來(lái)提供更多擴(kuò)展的加鎖功能。Lock彌補(bǔ)了synchronized的局限,提供了更加細(xì)粒度的加鎖功能。
1.2 Lock簡(jiǎn)介
Lock api如下
void lock(); void lockInterruptibly() throws InterruptedException; boolean tryLock(); boolean tryLock(long time, TimeUnit unit) throws InterruptedException; void unlock(); Condition newCondition();