重入鎖也叫作遞迴鎖,指的是同乙個執行緒外層函式獲取到一把鎖後,內層函式同樣具有這把鎖的控制許可權
synchronized和reentrantlock就是重入鎖對應的實現
synchronized——重量級的鎖
reentrantlock——輕量級的鎖 lock()代表加入鎖 unlock()代表釋放鎖
不可重入鎖:說明當沒有釋放該鎖時。其他執行緒獲取該鎖會進行等待
publicclass
mylock
//當前沒有人使用情況下就占用該鎖
islocked=true
; }
//釋放鎖
public
synchronized
void
unlock()
}
publicclass
mylocktest
//b業務方法
synchronized可重入性:如果當前a持有一把鎖,在a業務內部呼叫b,那麼b也同樣擁有這把鎖的使用許可權
publicclass
mylocktest
//b業務方法
reentrantlock同樣具有可重入性
publicclass
mylocktest
//b業務方法
reentrantlock底層:
publicreentrantlock()
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 ...