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