執行緒鎖:
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...