「Java面试」工作3年竟然回答不出如何理解Reentrantlock实现原理

简介: 一个3 年工作经验的小伙伴,在面试的时候被这样一个问题。”谈谈你对ReentrantLock实现原理的理解“,他当时零零散散的说了一些。但好像没有说关键点。希望我分享一下我的理解。

一个3 年工作经验的小伙伴,在面试的时候被这样一个问题。”谈谈你对ReentrantLock实现原理的理解“,他当时零零散散的说了一些。但好像没有说关键点。希望我分享一下我的理解。


另外,我花了1个多星期,准备了一份500页的PDF面试题解析配套文档,想获取的小伙伴可以扫描文章底部二维码免费领取!


(附赠10万字大厂内部面试资料!)

1、什么是 ReentrantLock

ReentrantLock 是一种可重入的排它锁,主要用来解决多线程对共享资源竞争的问题。


它有四个比较核心的特性:

image.jpeg


第1,它支持可重入,也就是获得锁的线程在释放锁之前再次去竞争同一把锁的时候,不需要加锁就可以直接访问。


第2,它支持公平和非公平特性


第3,它提供了阻塞竞争锁和非阻塞竞争锁的两种方法,分别是 lock()和 tryLock()。

2、ReentrantLock 的实现原理

ReentrantLock 的底层实现有几个非常关键的技术。


第1个,锁的竞争,ReentrantLock 是通过互斥变量,使用 CAS 机制来实现的。

image.jpeg


没有竞争到锁的线程,使用了 AbstractQueuedSynchronizer 这样一个队列同步器来存储,底层是通过双向链表来实现的。当锁被释放之后,会从 AQS 队列里面的头部唤醒下一个等待锁的线程。


第2个,公平和非公平的特性,主要是体现在竞争锁的时候,是否需要判断 AQS 队列存在等待中的线程。


第3个,锁的重入特性,在 AQS 里面有一个成员变量来保存当前获得锁的线程,当同一个线程下次再来竞争锁的时候,就不会去走锁竞争的逻辑,而是直接增加重入次数。


要回答好这样一道面试题,必须要理解 ReentrantLock 的设计思想,虽然很基础,但很重要。地基的深度决定了楼层的高度。


最后,我把之前分享的视频全部整理成了文字,想获取的小伙伴可以从我的个人煮叶简介中找到,希望能够以此来提高各位粉丝的通过率。

相关文章
|
1天前
|
Java
Java中多态的实现原理解析
Java中多态的实现原理解析
|
3天前
|
缓存 Java 数据库连接
java面试题目 强引用、软引用、弱引用、幻象引用有什么区别?具体使用场景是什么?
【6月更文挑战第28天】在 Java 中,理解和正确使用各种引用类型(强引用、软引用、弱引用、幻象引用)对有效的内存管理和垃圾回收至关重要。下面我们详细解读这些引用类型的区别及其具体使用场景。
12 3
|
4天前
|
负载均衡 NoSQL Dubbo
java分布式面试快问快答
java分布式面试快问快答
14 0
|
4天前
|
XML Java 数据库连接
面试必备!Java核心技术100+面试题
面试必备!Java核心技术100+面试题
|
4天前
|
算法 Java 调度
《面试专题-----经典高频面试题收集四》解锁 Java 面试的关键:深度解析并发编程进阶篇高频经典面试题(第四篇)
《面试专题-----经典高频面试题收集四》解锁 Java 面试的关键:深度解析并发编程进阶篇高频经典面试题(第四篇)
9 0
|
4天前
|
安全 算法 Java
java多线程面试题2019整理
java多线程面试题2019整理
|
5天前
|
SQL 网络协议 Java
技术经验分享:Java不会或做错的面试题总结
技术经验分享:Java不会或做错的面试题总结
14 0
|
5天前
|
安全 Java 中间件
《面试专题-----经典高频面试题收集一》解锁 Java 面试的关键:深度解析常见高频经典面试题(第一篇)
《面试专题-----经典高频面试题收集一》解锁 Java 面试的关键:深度解析常见高频经典面试题(第一篇)
15 0
|
5天前
|
安全 Java API
《面试专题-----经典高频面试题收集三》解锁 Java 面试的关键:深度解析并发编程基础篇高频经典面试题(第三篇)
《面试专题-----经典高频面试题收集三》解锁 Java 面试的关键:深度解析并发编程基础篇高频经典面试题(第三篇)
10 0
|
6天前
|
Java
Java中的面试常见问题解析
Java中的面试常见问题解析