news 2026/7/29 9:14:06

Java常见技术分享-14-多线程安全-锁机制-常见的锁以及底层实现-synchronized

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java常见技术分享-14-多线程安全-锁机制-常见的锁以及底层实现-synchronized

synchronized

核心特性
  • 可重入(同一线程可以多次获取同一个对象的锁, 不会因为自己已经持有的锁陷入阻塞)
  • 互斥 (同一时间内只有一个线程持有锁, 线程安全的核心)
  • 悲观 (假设线程的冲突概率高, 直接加锁, 悲观策略,让synchronized 在竞争激烈的情况下很稳定)
针对悲观策略 JDK1.6 之后的重大升级

在JDK1.6 之前 synchronized就是 纯悲观策略, 不管竞争是否激烈, 只要进入代码块, 直接加上重量级锁(阻塞与唤醒)。
JDK1.6之后, 就变成了根据竞争的激烈程度进行升级。
一开始是偏向锁, 只有一个线程的时候, 系统会在对象头记录 这个线程ID, 下次再进入同步代码块, 就不用申请锁了, 直接就能执行。
当有第二个线程 想要竞争锁的时候, 偏向锁 就会升级成轻量级锁, 即虚拟机 发现第二个线程要锁, 且对象头里记录的ID不是第二个线程的。
这时每个线程都会复制一份对象头 里的锁信息, 然后 双方都尝试用CAS操作 去 修改 对象头 里的 锁标记 成 自己的线程ID, 当修改成功 就拿到锁了。
具体的流程是, 在竞争之前 , 会先复制一份 锁标记的信息 , 然后在自己的存储区域 计算出 自己的锁记录地址 ,比如 0x456,更新 锁标记信息, 然后 对 对象头 里的锁标记 信息 执行CAS操作, 把自己的 新的 锁标记信息 更新到对象头上, 执行成功 就拿到锁了。
如果没成功, 就会自旋式的请求锁.(补充一个场景, 如果线程B拿到了锁, 锁标记中的锁记录地址是 0x456, 如果线程C进来 复制了 锁信息 ,是0x456, CAS操作, C虽然 确实 锁记录地址 与预期一致, 但是会因为线程B还在持有锁 而被阻止, 所以会失败, 知道线程B释放锁, 把 锁标记 重新改为默认的mark word副本)。
当同时 自旋的线程 或者 线程的自旋的次数 过多。 就会升级为重量级锁。
对象头里边 会存储一个 指向monitor对象的指针, 这个monitor对象就像一个锁管家 ,当线程竞争失败, 就会被monitor对象标记为阻塞状态,放入等待队列。 不会占用CPU资源。 需要注意的是 锁记录地址 转移到了monitor对象里边。

卧槽今天北京太冷了, 顶不住。 后面其实还有几个锁的,后面的篇章再说吧

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/21 9:27:30

Open-AutoGLM批量处理接口实战(万级请求下的稳定性保障方案)

第一章:Open-AutoGLM接口概述Open-AutoGLM 是一个面向自动化自然语言处理任务的开放接口系统,专为大语言模型(LLM)集成与调度设计。该接口支持动态任务分发、模型热切换与多模态输入解析,适用于智能客服、自动报告生成…

作者头像 李华
网站建设 2026/7/26 15:38:35

QwQ-32B-AWQ终极指南:4-bit量化让大模型推理触手可及 [特殊字符]

QwQ-32B-AWQ终极指南:4-bit量化让大模型推理触手可及 🚀 【免费下载链接】QwQ-32B-AWQ 项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/QwQ-32B-AWQ 还在为大语言模型的高显存需求而烦恼吗?QwQ-32B-AWQ模型通过AWQ 4-bit量化技术…

作者头像 李华
网站建设 2026/7/20 19:25:52

Windows平台32位Java开发环境配置指南

Windows平台32位Java开发环境配置指南 【免费下载链接】JDK1.832位Windows安装包 本仓库提供的是JDK1.8的最新版32位Windows安装包,文件名为jdk-8u271-windows-i586.exe。该安装包适用于32位的Windows操作系统,可以帮助开发者快速搭建Java开发环境 项目…

作者头像 李华
网站建设 2026/7/20 18:21:30

JSONlite 终极指南:零配置的JSON文档存储神器

JSONlite 终极指南:零配置的JSON文档存储神器 【免费下载链接】jsonlite A simple, self-contained, serverless, zero-configuration, json document store. 项目地址: https://gitcode.com/gh_mirrors/js/jsonlite 还在为复杂的数据库配置而烦恼吗&#xf…

作者头像 李华
网站建设 2026/7/20 18:31:56

ComfyUI-SeedVR2视频超分插件:从入门到精通的完整实战手册

你是否曾经为老旧视频的模糊画面而烦恼?是否想要将低分辨率素材转化为高清画质?现在,ComfyUI-SeedVR2视频超分插件将为你打开全新的视觉升级之门。这款强大的工具能够将普通的视频和图像提升到令人惊艳的清晰度,让每一个细节都清晰…

作者头像 李华
网站建设 2026/7/29 6:51:27

PRO Elements完整指南:免费解锁Elementor Pro全部功能

PRO Elements完整指南:免费解锁Elementor Pro全部功能 【免费下载链接】proelements This plugin enables GPL features of Elementor Pro: widgets, theme builder, dynamic colors and content, forms & popup builder, and more. 项目地址: https://gitcod…

作者头像 李华