前言
重入锁
重入的一种实现方式:
为每一个锁关联一个获取计数值和一个所有者线程。当计数值为0时,这个锁被认为是没有被任何线程持有。当一个线程持有一个未持有的锁的时候,JVM 将记下锁的持有者,并且将获取计数值将其置1。如果这个线程再次获取这个锁,计数值+1,当线程退出同步代码块时,计数值-1。当计数值为0时,释放锁。
示例如下:
public class A {
public synchronized void doSomething() {
...
}
}
public class B extends A {
@Override
public synchronized void doSomething() {
super.doSomething();
...
}
}
如果 synchronized 不是重入锁,那么这段代码就会出现死锁。