什么是重入锁?
字面上理解就是可以重新获取进入的锁,实际上也是这样理解的,
官方解释:当某个线程获取到锁时,该线程还能继续获取该锁。
也就是说线程可以重复获取同一把锁
就像下面这样:一个类中,同步方法之间的调用就需要重复获取this锁
public class Demo1 {
public synchronized void functionA(){
System.out.println("iAmFunctionA");
functionB();
}
public synchronized void functionB(){
System.out.println("iAmFunctionB");
}
}
重入锁的意义?
在某个线程需要重复获取同一把锁的情况下,不会导致死锁的发生。
常见的重入锁?
synchronized,ReentrantLock
重入锁的实现原理
通过为每个锁关联一个请求计数器和一个获得该锁的线程。当计数器为0时,认为锁是未被占用的。线程请求一个未被占用的锁时,JVM将记录该线程并将请求计数器设置为1,此时该线程就获得了锁,当该线程再次请求这个锁,计数器将递增,当线程退出同步方法或者同步代码块时,计数器将递减,当计数器为0时,线程就释放了该对象,其他线程才能获取该锁