转载: https://blog.csdn.net/u012545728/article/details/80843595
可重入锁的实现关键 就是 允许同一个线程, 能够重复执行 带有lock锁的方法 或者 带有 synchronized 关键字的方法。
那就 必须在 带有lock锁的方法 或者 带有 synchronized 关键字的方法 上 加上当前执行线程 是否与 前面加锁的线程 是同一个的线程: 如果是的话,那么可以重入; 不是的话,就是其他线程,需要等待,避免并发问题。
boolean isLocked = false;
Thread lockedBy = null;
int lockedCount = 0;
public synchronized void lock()
throws InterruptedException{
Thread thread = Thread.currentThread();
while(isLocked && lockedBy != thread){
wait();
}
isLocked = true;
lockedCount++;
lockedBy = thread;
}
public synchronized void unlock(){
if(Thread.currentThread() == this.lockedBy){
lockedCount--;
if(lockedCount == 0){
isLocked = false;
notify();
}
}
}
再转一篇: