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