关键字synchronized拥有锁重入的功能,也就是在使用synchronized时,当一个线程得到一个对象锁后,再次请求此对象锁时是可以再次得到该对象的锁的。这也证明在一个synchronized方法或者代码块内部调用本类的其它synchronized方法或者代码块时,是永远可以得到锁的。
例如:
线程类:
运行类:
运行结果:
“可重入锁”的概念是:自己可以再次获取自己的内部锁。比如有一条线程获得了某个对象的锁,此时这个对象锁还没有释放,当其再次想要获取这个对象锁的时候还是可以获取的,如果锁不可重入的话,就会造成死锁。
看下面的例子:
子类:
线程类:
运行类:
运行结果:
此实验说明,当存在父子类继承关系时,子类时完全可以通过可重入锁调用父类的同步方法的。