可重入鎖介紹 使用

2022-09-01 23:00:31 字數 1294 閱讀 6722

目錄

可重入鎖,也叫做遞迴鎖,指的是同一執行緒外層函式獲得鎖之後 ,內層遞迴函式仍然可以獲取該鎖的**,但不受影響。

可重入鎖使用示例

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 不可重入鎖的實...