什么是可重入,什么是可重入锁?它用来解决什么问题?
可重入是多线程并发编程里面一个比较重要的概念,
简单来说,就是在运行的某个函数或者代码,因为抢占资源或者中断等原因导致函数或者代码的运行中断,
等待中断程序执行结束后,重新进入到这个函数或者代码中运行,并且运行结果不会受到影响,那么这 个函数或者代码就是可重入的。
(如图) 而可重入锁,简单来说就是一个线程如果抢占到了互斥锁资源,在锁释放之前再去竞争同一 把锁的时候,不需要等待,只需要记录重入次数。
在多线程并发编程里面,绝大部分锁都是可重入的,比如 Synchronized、ReentrantLock 等,但是也 有不支持重入的锁,比如 JDK8 里面提供的读写锁 StampedLock。
锁的可重入性,主要解决的问题是避免线程死锁的问题。
因为一个已经获得同步锁 X 的线程,在释放锁 X 之前再去竞争锁 X 的时候,相当于会出现自己要等待
自己释放锁,这很显然是无法成立的。
以上就是我对这个问题的理解。