阳哥讲面试题(五)各种锁,LockSupport,AQS
可重入锁(又名递归锁)
概述
可重入锁种类
隐式锁(即synchronized使用的锁)默认是可重入锁
Synchronized可重入的实现原理
多啥会多出来一个,是为了防止发生异常也可以退出锁
显式锁(即Lock)也有ReentrantLock这样的可重入锁
LockSupport
是什么
线程等待唤醒机制(wait/notify)的改良加强版
3种让线程等待和唤醒的方法
Object类中的wait和notify实现线程等待和唤醒
可能会发生两种异常
Condition接口中的await和signal实现线程等待和唤醒
产生的问题同上
传统的Synchronized和Lock实现等待唤醒通知的约束
LockSupport类中的park等待和unpark唤醒
底层原理
代码
如果先unpark再park也不会阻塞,解决了上述两种出现的问题
解释
重点
相关的面试题
AbstractQueuedSynchronizer(抽象的队列同步器)之AQS
源码所在
AQS为什么是JUC中最重要的基石
理解锁和同步器的关系
- 锁,面向锁的使用者
- 同步器,面向锁的实现者
AQS初步
官网解释
有阻塞就需要排队,实现排队必然需要队列
AQS内部体系架构
node类
从ReentrantLock开始解读AQS
ReentrantLock加锁过程
概述
- 尝试枷锁
- 加锁失败,线程进入队列
- 线程入队列后,进入阻塞状态
详解
参考模拟图
这是A在占用
A执行完,B获得执行权
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人