多线程(进阶)主要学习思想
Java多线程锁策略 笔记通俗易懂例子这三组是不同维度对锁的分类不要混在一起悲观锁 / 乐观锁思想层面认为会不会发生并发冲突重量级锁 / 轻量级锁synchronized底层实现层面JVM里对象头的锁状态挂起等待锁 / 自旋锁等待锁失败时的行为拿不到锁怎么办一、悲观锁 VS 乐观锁1. 悲观锁想法默认一定会发生并发冲突每次操作数据先上锁保护。只要操作共享数据先把锁拿到手别人无法修改。等我操作完释放锁其他人才能访问。 ✅ 典型例子synchronized、ReentrantLock、数据库select ... for update生活例子去卫生间进门直接反锁。默认认为一定会有人跟我抢位置。特点冲突多的时候性能更好会阻塞其他线程拿不到锁就等待2. 乐观锁想法默认不会发生并发冲突不加锁提交修改的时候检查有没有被别人改动过。不上锁直接读写更新时校验版本号。如果数据已经被别人改了本次修改失败重试。 ✅ 典型例子volatile CASAtomicInteger、数据库版本号version机制生活例子图书馆自习座位不锁门当你要坐下前看一眼座位有没有被占。被占了就换位置重试。特点冲突少的时候性能高没有阻塞失败就重试冲突特别多的时候会不断重试CPU浪费严重一句话区分悲观锁先锁再干活乐观锁先干活提交时检查冲突。二、重量级锁 VS 轻量级锁特指synchronized底层这两个都是悲观锁是JVM对synchronized的优化存储在对象头Mark Word。1. 重量级锁依赖操作系统内核的互斥锁。 线程拿不到锁 →操作系统把线程挂起放到内核等待队列锁释放后操作系统再唤醒线程。缺点线程挂起阻塞、唤醒需要用户态↔内核态切换开销很大。例子多个线程长时间竞争同一个synchronized锁锁升级成重量级锁。2. 轻量级锁用户态实现不调用操作系统内核锁。 适用场景多个线程交替使用锁几乎不并发竞争。 拿锁失败不会直接挂起而是尝试自旋。注意一旦出现两条线程同时抢锁轻量级锁就膨胀升级为重量级锁。一句话区分 重量级锁找OS内核帮忙线程挂起唤醒开销大。 轻量级锁JVM在用户态处理不依赖OS内核适合低竞争场景。补充偏向锁synchronized最底层优化偏向锁是轻量级锁的前置状态只有一个线程使用锁连CAS操作都尽量省略。三、挂起等待锁 VS 自旋锁拿不到锁时的两种等待方式1. 挂起等待锁阻塞锁抢锁失败线程被操作系统挂起休眠让出CPU。 锁释放之后操作系统再唤醒这个线程。 ✅优点不占用CPU线程休眠CPU可以跑别的任务 ❌缺点唤醒线程开销大用户态内核态切换。例子synchronized重量级锁、ReentrantLock默认非公平锁底层等待队列就是挂起等待2. 自旋锁抢锁失败不放弃CPU循环不断重试抢锁while循环不停检查锁是否释放。// 简易自旋锁伪代码 while (!尝试获取锁()) { // 原地循环反复尝试抢锁 }✅优点如果锁很快释放不需要线程切换速度快 ❌缺点如果锁长时间拿不到会一直循环空耗CPU例子CAS实现的自旋锁、Atomic类底层就是自旋生活例子 挂起等待锁排队办业务拿号之后坐到椅子上休息轮到你才叫你。不占用柜台资源但是叫号有延迟 自旋锁站在窗口前不停反复问“好了没有好了没有”一直循环询问不离开。短时间内很快长时间就很累汇总表格背诵版分类维度锁核心思想典型示例并发冲突预判悲观锁默认一定会冲突操作前上锁synchronized、ReentrantLock乐观锁默认不会冲突提交时校验冲突CAS、AtomicIntegersynchronized底层实现重量级锁依赖OS内核线程挂起高竞争下的synchronized轻量级锁用户态无内核调用低竞争交替使用锁的synchronized抢锁失败行为挂起等待锁抢不到锁线程休眠让出CPUsynchronized重量级锁自旋锁抢不到锁循环重试占用CPUCAS自旋锁⚠️高频易错点考试常坑悲观锁 ≠ 重量级锁。synchronized既是悲观锁又可以从轻量级锁膨胀到重量级锁。乐观锁没有阻塞依靠CAS自旋重试乐观锁不等于自旋锁。自旋锁只是等待策略可以是乐观锁也可以是悲观锁。轻量级锁不是乐观锁轻量级锁仍然属于悲观锁它假设会有竞争只是竞争不激烈。一句话速记悲观乐观预判会不会冲突轻重量级synchronized底层要不要找操作系统内核自旋/挂起抢不到锁是循环重试还是睡觉放弃CPU

相关新闻

Unison 的 Doc2 文档代码示例渲染:深入解读 fix3634 回归测试中的 docExample 行为

Unison 的 Doc2 文档代码示例渲染:深入解读 fix3634 回归测试中的 docExample 行为

编程语言编译器语言运行时开发工具 【免费下载链接】unison A friendly programming language from the future 项目地址: https://gitcode.com/gh_mirrors/un/unison 点击查看 免费下载 本文以 unison-src/transcripts/idempotent/fix3634.md 这份幂等回归测试&am…

2026/10/10 9:04:44 阅读更多 →
springboot高校新生报到管理系统17415-计算机课程设计、毕业设计

springboot高校新生报到管理系统17415-计算机课程设计、毕业设计

第一章 绪论 1.1 研究背景和意义 高校新生报到工作属于高校管理体系的重要部分,近些年来,伴随着高等教育规模不断增大,新生人数持续上升,报到流程越来越繁杂,对信息处理和服务效率提出更高的要求[1]。在传统的模式下&…

2026/10/10 9:04:44 阅读更多 →
Rust 安全审计之 STRCMP 缺陷识别:string-comparison-finder 指南

Rust 安全审计之 STRCMP 缺陷识别:string-comparison-finder 指南

AI 技能AI 插件应用安全网络安全AI 评测 【免费下载链接】skills Trail of Bits Claude Code skills for security research, vulnerability detection, and audit workflows 项目地址: https://gitcode.com/gh_mirrors/skills8/skills 点击查看 免费下载 导读 本…

2026/10/10 9:04:44 阅读更多 →

最新新闻

N8N企业级落地为何频频翻车?从部署到治理的实战避坑指南

N8N企业级落地为何频频翻车?从部署到治理的实战避坑指南

1. 为什么N8N越火,企业落地越容易翻车过去两年,我在不同公司和企业客户那边见过太多次N8N的“高开低走”:技术负责人看到N8N的开源界面、可视化编排和几百个现成节点,觉得终于找到了一个能替代传统接口开发的“万能胶水”&#xf…

2026/10/11 10:58:28 阅读更多 →
Java炸弹人游戏源码解析:从地图生成到碰撞检测的实战指南

Java炸弹人游戏源码解析:从地图生成到碰撞检测的实战指南

简介:Java炸弹人游戏资源包是一份面向Java初学者和游戏开发爱好者的完整项目源码,以经典炸弹人玩法为载体,展示从游戏窗口搭建、地图初始化到玩家交互、胜负判断的完整实现过程。压缩包共37个文件,含9个java源文件、12个class编译…

2026/10/11 10:58:28 阅读更多 →
把“人味“变成分数:Human-Likeness 盲测第一的含金量到底几成

把“人味“变成分数:Human-Likeness 盲测第一的含金量到底几成

把"人味"变成分数:Human-Likeness 盲测第一的含金量到底几成 【免费下载链接】Hemmingway-1 项目地址: https://ai.gitcode.com/hf_mirrors/Altworld/Hemmingway-1 让大模型写一封给房东的短信、一条给同事的告别留言,是当下 AI 写作最…

2026/10/11 10:58:28 阅读更多 →
C#零配置网络:链路本地地址与mDNS服务发现实战

C#零配置网络:链路本地地址与mDNS服务发现实战

简介:ZeroConfiOS是一个面向C#开发者、聚焦网络服务自动化部署的开源工具库,专为解决动态网络环境下服务发布与IP地址自适应配置难题而设计,适用于物联网设备、跨平台微服务及多网卡场景下的快速集成。资源包共43个文件,含32个核心…

2026/10/11 10:58:28 阅读更多 →
三国人物关系知识图谱可视化与问答系统:构建与工程实现

三国人物关系知识图谱可视化与问答系统:构建与工程实现

简介:基于知识图谱的三国人物关系可视化与问答系统,是一份面向计算机相关专业学生、教师及初学者的完整Python工程项目。项目将三国演义文本数据抽取为实体与关系,构建知识图谱,并配套网页端可视化界面与自然语言问答模块&#xf…

2026/10/11 10:58:28 阅读更多 →
识别虚假技术资源:Bishop深度学习2024真伪验证指南

识别虚假技术资源:Bishop深度学习2024真伪验证指南

简介:这是一本由机器学习权威Christopher M. Bishop与Hugh Bishop合著的深度学习前沿教材,面向高校研究生、AI研究人员及具备数学与编程基础的进阶学习者,系统构建从神经网络基础到Transformer、图神经网络等现代架构的理论框架。资源为单文件…

2026/10/11 10:57:28 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →