併發中鎖的分類

1、自旋鎖
線程狀態及上下文切換消耗系統資源,當訪問共享資源的時間短,頻繁切換上下文不值得。jvm使線程在沒有獲得鎖的時候,執行空循環,循環幾次之後,如果還沒獲得鎖,再被掛起。

2、阻塞鎖
改變了線程的運行狀態,讓線程進入阻塞狀態進行等待,當獲得相應的信號(喚醒或者時間)時,纔可以進去線程的準備就緒狀態,轉爲就緒狀態的所有線程,通過競爭,進去運行狀態。

3、重入鎖
支持線程再次進入的鎖。

4、讀寫鎖
兩把鎖,讀鎖和寫鎖,寫寫互斥、讀寫互斥、讀讀共享

5、互斥鎖
同一時刻,只能有一個線程進入。

6、悲觀鎖
總是假設最壞的情況,每次拿數據的時候都認爲別人會修改,所以每次拿數據的時候都會上鎖,這樣別人想拿這個數據就會被阻塞知道它拿到鎖。synchronized是悲觀鎖。

7、樂觀鎖
每次去拿數據的時候都認爲別人不會修改,所以不會上鎖,但是在更新的時候會判斷一下在此期間別人有沒有去更新這個數據,使用版本號等機制。mysql樂觀鎖,使用version標記。

8、公平鎖
大家都排隊。

9、非公平鎖
一部分人排隊,新來的可能會插隊。

10、偏向鎖
一直持有鎖,等到競爭出現才釋放鎖的機制,當其他線程嘗試競爭偏向鎖機制時,持有偏向鎖的線程纔會釋放鎖。

11、獨佔鎖
每次只有一個線程能持有鎖,與互斥鎖一樣

12、共享鎖
允許多個線程同時獲取鎖,併發訪問,共享資源。讀鎖。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章