📚 分类
多线程
🕵🏽‍♀️ 问题描述
synchronized关键字的底层原理?
👨‍🏫 问题讲解
✔ Synchronized【对象锁】采用互斥的方式让同一时刻至多只有一个线程能持有【对象锁】
✔ 其它线程再想获取这个【对象锁】时就会阻塞住
✔ 他是可重入锁(准许中途去执行别的逻辑,执行完毕后继续回来执行当前逻辑)

❒ Monitor 被翻译为监视器,是由jvm提供,c++语言实现,Monitor结构如下:
✔ Owner: 存储当前获取锁的线程的,只能有一个线程可以获取
✔ EntryList: 关联没有抢到锁的线程,处于Blocked状态的线程
✔ WaitSet: 关联调用了wait方法的线程,处于Waiting状态的线程

对于每一个Java对象都可以绑定一个Monitor对象(锁),当多个线程来执行被synchronized修饰的同步代码块时,根据JDK的调度机制会选取其中一个线程来作为该对象绑定的Monitor对象的拥有者(Owner),并且一个Monitor对象只能有一个锁主人(Owner),然后该线程便获得了执行该同步代码块的权利,而对于那些没有被选中的线程则会放入一个等待队列(EntryList)中进行等待,只有当前线程完成工作后才会更新调度规则选出新的Owner。
🏳️‍🌈 问题总结
❒ synchronized关键字的底层原理

1. 阶段1:偏向锁(默认状态,像“私人厕所”)
2. 阶段2:轻量级锁(轻度竞争,像“朋友间快速协商”)
3. 阶段3:重量级锁(重度竞争,像“请管理员来管”)
4. 是一种不公平锁
5. 是一种可重入锁
6. 不是读写锁
📖 问题信息
📈 浏览次数:14 | 📅 更新时间:2025-12-24 15:03:53
📦 创建信息
🏷️ ID:103 | 📅 创建时间:2024-12-17 17:28:19