首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Java面试】工作3年被大厂裁员竟然回答不出:如何理解Reentrantlock实现原理

【Java面试】工作3年被大厂裁员竟然回答不出:如何理解Reentrantlock实现原理

作者头像
Tom弹架构
发布2022-09-22 11:38:45
发布2022-09-22 11:38:45
2770
举报
文章被收录于专栏:Tom弹架构Tom弹架构

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

1、什么是 ReentrantLock

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

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

ENTER TITLE

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

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

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

2、ReentrantLock 的实现原理

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

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

ENTER TITLE

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

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

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

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

我是被编程耽误的文艺Tom,如果我的分享对你有帮助,请动动分享给更多的人。关注我,面试不再难!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-07-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Tom弹架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档