可重入锁
(以下解释来自博客 http://http://blog.csdn.net/joker_apple/article/details/52790181)
所谓重入锁,指的是以线程为单位,当一个线程获取对象锁之后,这个线程可以再次获取本对象上的锁,而其他的线程是不可以的
synchronized 和 ReentrantLock 都是可重入锁可重入锁的意义在于防止死锁
实现原理实现是通过为每个锁关联一个请求计数和一个占有它的线程。
当计数为0时,认为锁是未被占有的。线程请求一个未被占有的锁时,jvm讲记录锁的占有者,并且讲请求计数器置为1 。
如果同一个线程再次请求这个锁,计数将递增;
每次占用线程退出同步块,计数器值将递减。直到计数器为0,锁被释放。
关于父类和子类的锁的重入:
子类覆写了父类的synchonized方法,然后调用父类中的方法,
此时如果没有重入的锁,那么这段代码将产生死锁。