目錄
可重入鎖,也叫做遞迴鎖,指的是同一執行緒外層函式獲得鎖之後 ,內層遞迴函式仍然可以獲取該鎖的**,但不受影響。可重入鎖使用示例
public class synchronizedsample implements runnable
public synchronized void funb()
@override
public void run()
public static void main(string args)
}
public class reentrantlocksample implements runnable
public void funb()
@override
public void run()
public static void main(string args)
}
程式輸出結果
thread-1 14
thread-1 14
thread-2 15
thread-2 15
thread-0 13
thread-0 13
可重入鎖最大作用是避免死鎖。
當乙個執行緒執行乙個帶鎖的**塊或方法,同時**塊或方法裡也獲取同乙個鎖。為了避免死鎖,此時就可以用可重入鎖。
相同點
兩種方式在加鎖和記憶體上提供的語義相同。
不同點
reentrantlock提供了其他的功能,包括定時的鎖等待、可中斷的鎖等待、公平與非公平鎖。而sychronized沒有這些功能。
reentrantlock的效能比sychronized要高一些。
sychronized鎖使用方式簡單,**表達直接緊湊,使用範圍廣,被許多開發人員所熟悉。
未來的情況下,可能會提公升sychronized而不是reentrantlock的效能。因為sychronized是jvm的內建屬性,優化可能性很大。
使用建議
在一些內建鎖sychronized無法滿足需求的情況下,reentrantlock可作為高階工具使用。否則,應該優先考慮使用sychronized。
/**
*/
可重入鎖 不可重入鎖
可重入鎖指的是可重複可遞迴呼叫的鎖,在外層使用鎖之後,在內層仍然可以使用,並且不發生死鎖 前提是同乙個物件或者類 note reentrantlock和synchronized都是可重入鎖 1 public class testlock 78 public synchronized void tes...
鎖 可重入鎖
reetrantlick相對於 synchronized 的優勢 reentrantlock獨有的能力 1.reentrantlock可以指定是公平鎖還是非公平鎖。而synchronized只能是非公平鎖。所謂的公平鎖就是先等待的執行緒先獲得鎖。2.reentrantlock提供了乙個conditi...
可重入鎖和不可重入鎖
當乙個執行緒獲得當前例項的鎖lock,並且進入了方法a,該執行緒在方法a沒有釋放該鎖的時候,是否可以再次進入使用該鎖的方法b?不可重入鎖 在方法a釋放鎖之前,不可以再次進入方法b 可重入鎖 在方法a釋放該鎖之前可以再次進入方法b 如reentrantlock和synchronized 不可重入鎖的實...