可重入鎖,可中斷鎖,公平鎖的理解

2021-08-13 07:14:59 字數 934 閱讀 9038

執行緒鎖:

1.可重入鎖(表明了鎖的分配機制):

synchronized和reentrantlock都是可重入鎖

比如當乙個執行緒執行到synchronized方法method1,而method1方法中呼叫了另乙個synchrogazed方法method2

此時執行緒不需要重新申請一把鎖,可以直接執行method2

class myclass 

public synchronized void method2()

}

如果不具備可重入性,method2沒有synchronized,那麼a執行緒會去申請一把鎖,而a擁有該物件鎖,就會導致執行緒a一直在申請獲取不到的鎖

2.可中斷鎖:

synchronized是不可中斷鎖,lock為可中斷鎖

如果執行緒a正在執行鎖中的**,執行緒b在等待獲取該物件鎖,如果等待時間過長,想讓b去做其他事情,可以讓他自己中斷或者在別的執行緒中斷它

3.公平鎖:

synchronized是非公平鎖,reentrantlock和reentrantreadwritelock預設是非公平鎖,可以開啟公平鎖

根據執行緒的等待時間來分配鎖,比如執行緒c的等待時間最長,c就獲得該鎖

public reentrantlock() 

public reentrantlock(boolean fair)

通過有參構造傳入布林值是否開啟公平鎖,預設不開啟公平鎖

reentrantlock方法:

isfair() //判斷鎖是否是公平鎖 

islocked() //判斷鎖是否被任何執行緒獲取了 

isheldbycurrentthread() //判斷鎖是否被當前執行緒獲取了 

hasqueuedthreads() //判斷是否有執行緒在等待該鎖

公平鎖非公平鎖和可重入鎖(遞迴鎖)

公平鎖非公平鎖 公平鎖 是指多個執行緒按照申請鎖的順序來獲取鎖,類似排隊打飯,先來後到。非公平鎖是指多個執行緒獲取鎖的順序並不是按照申請鎖的順序,有可能後申請的執行緒比先申請的執行緒優先獲取鎖,在高併發的情況下,有可能會造成優先順序反轉或者飢餓現象 對reentrantlock而言 通過建構函式指定...

鎖 可重入鎖

reetrantlick相對於 synchronized 的優勢 reentrantlock獨有的能力 1.reentrantlock可以指定是公平鎖還是非公平鎖。而synchronized只能是非公平鎖。所謂的公平鎖就是先等待的執行緒先獲得鎖。2.reentrantlock提供了乙個conditi...

可重入鎖 不可重入鎖

可重入鎖指的是可重複可遞迴呼叫的鎖,在外層使用鎖之後,在內層仍然可以使用,並且不發生死鎖 前提是同乙個物件或者類 note reentrantlock和synchronized都是可重入鎖 1 public class testlock 78 public synchronized void tes...