一位工作了3年的粉丝私信我,面试的时候遇到了这样的问题。“请说说ReentrantLock的实现原理”,他根据自己的理解零散的说了一些。但是好像没有提到重点。先说一个issue的回答思路。那么关于这个问题,我们来看看普通人和专家的回答。普通人:ReentrantLock的一种实现原理,是可重入锁,也是可重入的排他锁。它将解决当我们多线程并行访问某些共享资源时,我可以通过ReentrantLock锁定它们的问题。实现原理是利用AQS实现称为线程的锁的同步,其核心是AQS。师父:好的,面试官,我就从这几个方面来回答这个问题。什么是重入锁?ReentrantLock的特点?ReentrantLock的实现原理首先,ReentrantLock是一个可重入排它锁,主要用来解决多线程对共享资源的竞争问题。它有几个核心特点:支持重入,即当获得锁的线程在释放锁前再次竞争同一个锁时,可以直接访问它而无需加锁。它支持公平和不公平的特征。它提供了阻塞竞争锁和非阻塞竞争锁两种方法,分别是lock()和tryLock()。那么,ReentrantLock的底层实现有几个非常关键的技术。对于锁竞争,ReentrantLock是通过互斥变量,使用CAS机制实现的。不竞争锁的线程使用AbstractQueuedSynchronizer等队列同步器存储,底层通过双向链表实现。当锁被释放时,下一个等待锁的线程会从AQS队列的头部被唤醒。公平与不公平的特点主要体现在竞争锁时是否需要判断AQS队列中是否有等待线程。最后,关于锁的可重入特性,AQS中有一个成员变量用来保存当前获取锁的线程。下次同一个线程来竞争锁的时候,就不会按照锁竞争的逻辑,而是直接增加重入。以上是我对这个问题的理解。这个问题总结起来很简单,但是要回答好,有两个关键点。大家一定要明白,ReentrantLock整个设计思想的表达,一定要条理清晰。虽然很基础,但是很重要。基础的深度决定了楼层的高度。有什么面试问题,职业发展问题,学习问题可以私信我。版权声明:除特别声明外,本博客所有文章均采用CCBY-NC-SA4.0许可协议。转载请注明来自Mic带你学建筑!如果本文对您有帮助,请给个关注和点赞。您的坚持是我不断创作的动力。欢迎关注同名微信公众号获取更多技术干货!
