重量级锁的基本原理
當(dāng)輕量級鎖膨脹到重量級鎖之后,意味著線程只能被掛起阻塞來等待被喚醒了。
重量級鎖的monitor?
加了同步代碼塊以后,在字節(jié)碼中會看到一個monitorenter和monitorexit。?
每一個JAVA對象都會與一個監(jiān)視器monitor關(guān)聯(lián),我們可以把它理解成為一把鎖,當(dāng)一個線程想要執(zhí)行一段被synchronized修飾的同步方法或者代碼塊時,該線程得先獲取到synchronized修飾的對象對應(yīng)的monitor。?
monitorenter表示去獲得一個對象監(jiān)視器。monitorexit表示釋放monitor監(jiān)視器的所有權(quán),使得其他被阻塞的線程可以嘗試去獲得這個監(jiān)視器
monitor依賴操作系統(tǒng)的MutexLock(互斥鎖)來實現(xiàn)的,?線程被阻塞后便進入內(nèi)核(Linux)調(diào)度狀態(tài),這個會導(dǎo)致系統(tǒng)在用戶態(tài)與內(nèi)核態(tài)之間來回切換,嚴(yán)重影響鎖的性能
?
總結(jié)
- 上一篇: 轻量级锁的解锁
- 下一篇: 重量级锁的加锁的基本流程