重入:
某个线程试图获取一个已经由它自己持有的锁,那么这个请求就会成功。“重入”意味着获取锁的操作的粒度是”
线程
”而不是“调用”。
重入的一种实现方式是为每个锁关联一个计数器和一个所有者线程。
重入避免了以下两种情况发生死锁:
1. 有synchronized修饰的方法递归调用。
2. 子类在重写的方法中调用父类相同的方法:
class FatherC {
public synchronized void doSomething() {
}
}
class childrenC extends FatherC {
@Override
public synchronized void doSomething() {
System.out.println("call father override method");
super.doSomething();
}
}