重入锁最多可以重入多少次?是否存在限制?
Java中的ReentrantLock没有明确限制一个线程可以重入多少次,理论上只要不发生溢出,就可以无限次重入。但实际上,由于ReentrantLock内部使用int类型来维护重入次数,所以最多可以重入2^31次(即Integer.MAX_VALUE次,大约是20亿次)。超过这个次数,内部的计数器将会溢出。
这个限制在实际应用中几乎不会遇到,因为如果一个线程需要重入这么多次,那么很可能是程序设计有问题,或者是出现了无限递归等情况。在正常的程序设计中,会尽量避免过多的锁重入,因为每次锁的获取和释放都会带来一定的性能开销。