只有當(dāng)synchronized無法滿足需求時(shí)顽决,才需要使用Lock短条,否則,一律使用synchronized才菠。
使用Lock的場(chǎng)景:可定時(shí)的茸时、可輪詢的、可中斷的鎖獲取操作赋访,公平隊(duì)列(synchronized只實(shí)現(xiàn)了非公平鎖)可都,非塊結(jié)構(gòu)的鎖。
內(nèi)置鎖與ReentrantLock相比還有另一個(gè)優(yōu)點(diǎn):在線程轉(zhuǎn)儲(chǔ)(使用jstack)中能給出在哪些調(diào)用幀中獲得了哪些鎖蚓耽,并能檢測(cè)和識(shí)別發(fā)生死鎖的線程渠牲。JVM并不知道哪些線程持有ReentrantLock。
內(nèi)置鎖是JVM的內(nèi)置屬性步悠,可以享受JVM優(yōu)化帶來的好處签杈,從JDK6.0開始,內(nèi)置鎖性能上已經(jīng)不輸synchronized了鼎兽。
內(nèi)置鎖結(jié)構(gòu)緊湊答姥,無需擔(dān)心沒有釋放鎖,而Lock如果沒有在finally塊中釋放谚咬,就是一顆隱藏的雷鹦付。