程序员的公众号:源1024,获取更多资料,无加密无套路!
最近整理了一份大厂面试资料《史上最全大厂面试题》,Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等
获取方式: 关注公众号并回复 666 领取,更多内容持续奉上
可重入锁,也叫做递归锁,指的是在同一线程内,外层获得锁之后,内层递归函数仍然可以获取到该锁。就是同一个线程再次进入同样代码时,可以再次拿到该锁。这种锁在同一线程内是安全的,因为它可以被同一线程多次获取,而不会产生不一致的状态。
作用:
防止在同一线程中多次获取锁而导致死锁发生。
在一个线程已经持有锁的情况下,如果该线程再次请求该锁,如果锁是不可重入的,那么线程在第二次请求锁时将被阻塞,因为它已经拥有了该锁。这种情况下,该线程可能会因为无法获取该锁而导致程序发生死锁。可重入锁通过允许一个线程多次获取同一个锁,保证了线程的执行不会被阻塞,从而避免了死锁的问题。
举例:
ReentrantLock和synchronized都是可重入锁,ReentrantLock是一个可重入且独占式的锁,是一种递归无阻塞的同步锁。和synchronized关键字相比,它更灵活、更强大,增加了轮询、超时、中断等高级功能。
总之,可重入锁是一种安全的锁机制,可以避免死锁的发生。
系列文章索引
MyBatis的插件能在哪些地方进行拦截?
了解MyBatis的缓存机制吗
面试官:谈谈对volatile的理解
Spring中用到了哪些设计模式
面试官:说一下SQL的执行过程
线程池的工作原理