更新時間:2022-10-28 10:20:09 來源:動力節點 瀏覽1466次
實現可重入鎖的原理是什么?動力節點小編來告訴你。可重入鎖的原理:判斷當前線程是否是持有鎖的線程,如果是則無需要wait(),如果不是則等待持有鎖的線程釋放!
/*可重入鎖的實現
* 加鎖其實就是讓其他線程等待*/
public class testLock{
Lock lock=new Lock();
public void a() throws InterruptedException {
lock.lock();
b();
lock.unlock();
}
public void b() throws InterruptedException {
lock.lock();
System.out.println("進入第二級方法");
lock.unlock();
}
public static void main(String[] args) throws InterruptedException {
testLock t=new testLock();
t.a();
}
}
class Lock{
private boolean isLocked=false;
private Thread Lockedby=null;//當前被鎖的線程
private int holdCount;//當前線程持有鎖的計數器
public synchronized void lock() throws InterruptedException {
while(isLocked&&Lockedby!=Thread.currentThread()){//標志位isLocked為ture,代表已有線程持有鎖,且當前線程不是持有鎖的線程,則等待鎖釋放
wait();
}
isLocked=true;
Lockedby=Thread.currentThread();
holdCount++;
}
public synchronized void unlock(){
if(Thread.currentThread()==Lockedby){//當前持有鎖的線程調用該方法
holdCount--;
if(holdCount==0){//當前線程釋放了全部鎖的時候,才喚醒其他調用lock方法被鎖定的線程
isLocked=false;
notify();}}
}
public int getHoldCount() {//得到鎖計數器,為了得到當前線程持有了幾個鎖
return holdCount;
}
}
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習