这个例子更加直观:
/**
* synchronized锁的重入
* 也就是一个同步方法调用另外一个同步方法,一个线程已经拥有某个对象的锁,再次申请的时候任然会得到该对象的锁
* 这里是继承中有可能发生的情形,子类调用父类的同步方法
* @author Forever
*
*/
import java.util.concurrent.TimeUnit;
public class Java_dxc010 {
synchronized void m() {
System.out.println("Father m start...");
try {
TimeUnit.SECONDS.sleep(2);
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println("Father m end!");
}
public static void main(String[] args) {
new T().m();
}
}
class T extends Java_dxc010{
synchronized void m() {
System.out.println("Child m start...");
super.m();
System.out.println("child m end!");
}
}
输出:
Child m start...
Father m start...
Father m end!
child m end!