轻量级锁的加锁和解锁逻辑-自旋锁
輕量級鎖在加鎖過程中,用到了自旋鎖
所謂自旋,就是指當有另外一個線程來競爭鎖時,這個線程會在原地循環(huán)等待,而不是把該線程給阻塞,直到那個獲得鎖的線程釋放鎖之后,這個線程就可以馬上獲得鎖的。
注意,鎖在原地循環(huán)的時候,是會消耗cpu的,就相當于在執(zhí)行一個啥也沒有的for循環(huán)。
所以,輕量級鎖適用于那些同步代碼塊執(zhí)行的很快的場景,這樣,線程原地等待很短的時間就能夠獲得鎖了。?
自旋鎖的使用,其實也是有一定的概率背景,在大部分同步代碼塊執(zhí)行的時間都是很短的。所以通過看似無異議的循環(huán)反而能提升鎖的性能。
但是自旋必須要有一定的條件控制,否則如果一個線程執(zhí)行同步代碼塊的時間很長,那么這個線程不斷的循環(huán)反而會消耗CPU資源。默認情況下自旋的次數(shù)是10次,可以通過?preBlockSpin來修改?
在JDK1.6之后,引入了自適應(yīng)自旋鎖,自適應(yīng)意味著自旋的次數(shù)不是固定不變的,而是根據(jù)前一次在同一個鎖上自旋的時間以及鎖的擁有者的狀態(tài)來決定。
如果在同一個鎖對象上,自旋等待剛剛成功獲得過鎖,并且持有鎖的線程正在運行中,那么虛擬機就會認為這次自旋也是很有可能再次成功,進而它將允許自旋等待持續(xù)相對更長的時間。如果對于某個鎖,自旋很少成功獲得過,那在以后嘗試獲取這個鎖時將可能省略掉自旋過程,直接
阻塞線程,避免浪費處理器資源
?
總結(jié)
以上是生活随笔為你收集整理的轻量级锁的加锁和解锁逻辑-自旋锁的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 轻量级锁的加锁和解锁逻辑
- 下一篇: 轻量级锁的解锁