关注
1. 锁级别
- 偏向锁:这是一种最乐观的锁策略。当一段同步代码一直被一个线程访问时,就会使用偏向锁。它会在对象头记录获取锁的线程ID,下次该线程进入同步块时,只需要检查对象头的线程ID是否是自己,若是则无需进行CAS(比较并交换)操作获取锁,直接进入同步块,这样可以减少不必要的性能开销。
- 轻量级锁:当有其他线程竞争偏向锁时,偏向锁会升级为轻量级锁。轻量级锁主要是通过自旋(即线程不断地循环检查锁是否可用)来获取锁。它假设线程持有锁的时间很短,在短时间内其他线程可以通过自旋等待获取锁,而不是使线程进入阻塞状态,因为线程阻塞和唤醒的开销较大。
- 重量级锁:如果自旋一定次数后(这个次数可以通过JVM参数调整)仍然无法获取锁,或者同时竞争锁的线程较多,轻量级锁会升级为重量级锁。重量级锁会使线程进入阻塞状态,等待操作系统的调度,涉及到用户态和内核态的切换,开销比较大。
2. 锁升级过程
- 最初,对象没有被锁定时,处于无锁状态。当一个线程访问同步块时,JVM会尝试使用偏向锁,将对象头的部分空间标记为偏向模式,并记录该线程的ID。
- 如果有其他线程尝试访问这个被偏向的对象,会检查偏向锁的持有线程是否还在使用。如果不在使用(比如已经结束),则新线程可以获取偏向锁;如果还在使用,就会将偏向锁升级为轻量级锁。
- 轻量级锁在多个线程竞争的情况下,会先通过自旋等待锁释放。当自旋达到一定次数后仍未获取到锁,或者等待的线程数量超过一定阈值(如CPU核数的一半),轻量级锁就会升级为重量级锁。一旦升级为重量级锁,等待锁的线程会被阻塞,直到持有锁的线程释放锁。
查看原帖
1 评论
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
- 1... 牛客2025年度报告—道心初立,夯实基础2.3W
- 2... 27届学院二本,袋鼠云->快手->腾讯wxg,25年末聊聊我的前端之路8672
- 3... 大四双非水产专业上岸阿里后端(五)6521
- 4... 本科五段大厂实习,秋招五个offer,我的校招结束了6333
- 5... 适可而止吧!你就是“烂泥”5615
- 6... 我的世界观,就是对抗优绩主义的武器3963
- 7... 27双非杀入字节!3158
- 8... 实习被“放养”零产出,该及时止损还是继续苟着?2435
- 9... 被问有没有男朋友 如果有同事欺负你怎么办2176
- 10... 26届双非硕Java秋招总结2001
正在热议
更多
# 实习没人带,苟住还是跑路? #
3435次浏览 107人参与
# 妈妈治愈了你哪些脆皮时刻 #
38177次浏览 338人参与
# 元旦假期你打算怎么过 #
3333次浏览 94人参与
# 非技术岗简历怎么写 #
274210次浏览 3160人参与
# 我们是不是被“优绩主义”绑架了? #
5017次浏览 187人参与
# 你做过哪些dirty work #
24703次浏览 154人参与
# 实习/项目/竞赛奖项,哪个对找工作更重要? #
102366次浏览 1185人参与
# 大家实习都在做什么? #
3766次浏览 45人参与
# 牛客2025仙途报告 #
23693次浏览 349人参与
# 面试官问过你最刁钻的问题是什么? #
2090次浏览 46人参与
# 毕业论文怎么查AI率 #
69875次浏览 1937人参与
# 一人说一家双休的公司 #
2261次浏览 38人参与
# 找工作如何保持松弛感? #
127224次浏览 1457人参与
# 找工作,行业重要还是岗位重要? #
88500次浏览 1772人参与
# 我来点评面试官 #
37338次浏览 162人参与
# 重来一次,我还会选择这个专业吗 #
397159次浏览 3882人参与
# 2022毕业即失业取暖地 #
125986次浏览 716人参与
# 查收我的offer竞争力报告 #
264032次浏览 1647人参与
# 机械人你觉得今年行情怎么样? #
6068次浏览 87人参与
# 过年期间可能会经历的尴尬瞬间 #
48646次浏览 315人参与
查看9道真题和解析