所谓重入锁,指的是以线程为单位,当一个线程获取对象锁之后,这个线程可以再次获取本对象上的锁,而其他的线程是不可以。

synchronized 和 ReentrantLock 都是可重入锁。

可重入锁的意义在于防止死锁。

锁的可重入性,主要解决的问题是避免线程死锁的问题。

因为一个已经获得同步锁X的线程,在释放锁X之前再去竞争锁X的时候,相当于会出现自己要等待自己释放锁,这很显然是无法成立的。

参考

https://www.cnblogs.com/Vincent-yuan/p/15008635.html

https://www.cnblogs.com/mic112/p/16359024.html