java鎖 自旋鎖

2021-07-29 09:21:24 字數 510 閱讀 3647

什麼是自旋鎖?

所謂自旋鎖是指不會引起呼叫者睡眠,若鎖資源被其他執行緒占有,則會迴圈檢查鎖資源的佔有者是否已經釋放鎖。總結下來自旋鎖就是原子操作+自迴圈

如何實現自旋鎖?

自旋鎖的原理是通過cas實現,

其中cas是比較並交換,本身是使用它的原子性的compareandset方法。

cas 操作中包含三個運算元 —— 需要讀寫的記憶體位置(v)、進行比較的預期原值(a)和擬寫入的新值(b)。如果記憶體位置v的值與預期原值a相匹配,那麼處理器會自動將該位置值更新為新值b。否則處理器不做任何操作。

public class atomicreferencetest 

}public void unlock ()

}

自旋鎖的優點

完美解決核心鎖的缺點

自旋鎖的缺點

長時間一直迴圈會導致cpu的白白浪費,高併發競爭下、cpu的消耗特別嚴重。

參考

Java中自旋鎖

自旋鎖 1.什麼是自旋鎖?當乙個執行緒需要在獲取鎖的時候,此時正好有其他執行緒占用著鎖,那麼此時該執行緒將會進入迴圈等待模式,直到成功獲取到鎖才會退出迴圈,因此稱為自旋鎖。2.什麼時候用到自旋鎖?自旋鎖的適用場景?1 單核處理器 2 多核處理器 3.自旋鎖的優缺點?自旋鎖可以避免上下文切換,但是由於...

Java輕量鎖 偏向鎖 自旋鎖 重量鎖

巨集觀上分為 悲觀鎖 樂觀鎖 悲觀鎖 認為寫多讀少,每次都會上鎖。樂觀鎖 讀多寫少。自旋鎖 如果持有鎖的執行緒能在很短的時間內釋放資源,那麼那些等待競爭鎖的執行緒就不需要做核心態與使用者態之間的切換進入阻塞狀態,只需要等一等 自旋 等待有鎖的執行緒釋放鎖後即可立即獲取鎖,避免使用者執行緒與核心的切換...

自旋鎖以及可重入自旋鎖

首先是簡單的自旋鎖 實現 package org.cc.concur public class mylock private boolean islocked false public synchronized void lock throws interruptedexception islock...