什么是可重入锁?
一个持有锁的线程,在释放锁之前,可以再次进入持有的当前锁
重入锁实现可重入性原理或机制
每一个锁关联一个线程持有者和计数器
当计数器为0时,表示该锁没有被任何线程持有,此时任何线程都可能获得该锁,进而调用相应的方法;
当某一线程获得该锁后,JVM会记下锁的持有线程,并且将计数器置为 1;
此时其它线程请求该锁,则必须等待,因为计数器不为0;
而该持有锁的线程如果再次请求这个锁,就可以再次拿到这个锁,同时计数器会递增;
当线程退出同步代码块时,计数器会递减,如果计数器为 0,则释放该锁。