重入鎖簡介

2022-08-31 22:54:25 字數 1899 閱讀 5881

重入鎖也叫作遞迴鎖,指的是同乙個執行緒外層函式獲取到一把鎖後,內層函式同樣具有這把鎖的控制許可權

synchronized和reentrantlock就是重入鎖對應的實現

synchronized——重量級的鎖         

reentrantlock——輕量級的鎖         lock()代表加入鎖              unlock()代表釋放鎖

不可重入鎖:說明當沒有釋放該鎖時。其他執行緒獲取該鎖會進行等待

public

class

mylock

//當前沒有人使用情況下就占用該鎖

islocked=true

; }

//釋放鎖

public

synchronized

void

unlock()

}

public

class

mylocktest

//b業務方法

synchronized可重入性:如果當前a持有一把鎖,在a業務內部呼叫b,那麼b也同樣擁有這把鎖的使用許可權

public

class

mylocktest

//b業務方法

reentrantlock同樣具有可重入性

public

class

mylocktest

//b業務方法

reentrantlock底層:

public

reentrantlock()

public reentrantlock(boolean

fair)

public

class

myreentrantlock

//占用鎖

islocked=true

;

//計數+1

lockedcount++;

//賦值執行緒

lockedby=thread;

}//釋放鎖

public

synchronized

void

unlock()}}

}

可重入鎖 不可重入鎖

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

可重入鎖和不可重入鎖

當乙個執行緒獲得當前例項的鎖lock,並且進入了方法a,該執行緒在方法a沒有釋放該鎖的時候,是否可以再次進入使用該鎖的方法b?不可重入鎖 在方法a釋放鎖之前,不可以再次進入方法b 可重入鎖 在方法a釋放該鎖之前可以再次進入方法b 如reentrantlock和synchronized 不可重入鎖的實...

可重入鎖和不可重入鎖

可重入鎖就是可以迴圈迭代使用的鎖,不會產生死鎖的現象,典型的就是synchronized和reentrantlock。不可重入鎖迴圈迭代使用則有產生死鎖的風險。可重入鎖 class reentranttest implements runnable public synchronized void ...