更新時間:2022-10-28 10:20:09 來源:動力節(jié)點 瀏覽2095次
實現(xiàn)可重入鎖的原理是什么?動力節(jié)點小編來告訴你。可重入鎖的原理:判斷當前線程是否是持有鎖的線程,如果是則無需要wait(),如果不是則等待持有鎖的線程釋放!
/*可重入鎖的實現(xiàn)
* 加鎖其實就是讓其他線程等待*/
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;//當前線程持有鎖的計數(shù)器
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){//當前持有鎖的線程調(diào)用該方法
holdCount--;
if(holdCount==0){//當前線程釋放了全部鎖的時候,才喚醒其他調(diào)用lock方法被鎖定的線程
isLocked=false;
notify();}}
}
public int getHoldCount() {//得到鎖計數(shù)器,為了得到當前線程持有了幾個鎖
return holdCount;
}
}