synchronize關(guān)鍵字

synchronized 關(guān)鍵字底層做了哪些優(yōu)化

JDK1.6后synchronize引入了,偏向鎖,輕量鎖,自旋鎖,鎖消除,鎖粗化等技術(shù)為了減少鎖的操作開銷

鎖有四種狀態(tài),他們會隨著競爭越激烈而升級,鎖只能升級不會降級,提高對獲得鎖和釋放鎖的效果

1:無鎖狀態(tài)

2:偏向鎖狀態(tài)

3:自旋鎖狀態(tài)

4:重量級鎖狀態(tài)


synchronized和ReentrantLock區(qū)別是什么?

synchronize和ReentrantLock都是可重入鎖,就是只要對象沒有釋放鎖還是可以獲取對象的

synchronize是JVM層面的,ReentrantLock是JDK層面的

synchronize和ReentrantLock控制等待和喚醒也是不同的,synchronize需要調(diào)用wait方法進入等待狀態(tài),需要其他線程調(diào)用notify和notifyall方法才能喚醒,ReentrantLock進入等待狀態(tài)要調(diào)用await方法,喚醒要調(diào)用signal和signalAll方法

synchronize在競爭資源時會一直等待,ReentrantLock可以嘗試獲取鎖,并得到獲取結(jié)果

synchronize加鎖代碼在執(zhí)行完任務(wù)或則出現(xiàn)異常后會釋放鎖,ReentrantLock不會釋放鎖,需要在finally代碼塊顯示釋放

synchronize是無法實現(xiàn)公平鎖的,ReentrantLock可以滿足公平鎖的

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容