什么是悲观锁?原理、使用场景与实战详解
在并发编程和数据库开发中“锁”是一个绕不开的话题。其中悲观锁是一种非常经典、也非常重要的并发控制机制。本文将从概念、原理、实现方式、使用场景和代码示例多个角度介绍什么是悲观锁。文章目录一、什么是悲观锁1. 悲观锁的定义2. 通俗理解二、悲观锁的工作原理三、悲观锁的主要实现方式1. 数据库层面的悲观锁2. Java 中的悲观锁synchronized3. ReentrantLock显式锁四、悲观锁 vs 乐观锁五、悲观锁的典型使用场景1. 高冲突写场景2. 对一致性要求极高的系统六、实战案例库存扣减1. 错误示例无锁2. 悲观锁实现七、悲观锁的优缺点分析优点缺点八、使用悲观锁的注意事项1. 控制锁的粒度2. 避免死锁3. 减少锁持有时间九、面试常见问题1. 什么是悲观锁2. 什么时候用悲观锁3. 悲观锁一定安全吗参考一、什么是悲观锁1. 悲观锁的定义悲观锁Pessimistic Lock是一种对并发冲突持“悲观态度”的锁机制。它的核心思想是总是认为并发操作一定会发生冲突因此在操作数据前先加锁。只要我在用数据就不允许别人修改。2. 通俗理解可以把悲观锁理解为“先上锁再干活”“宁可等也不乱”就像公共洗手间进去先反锁出来再开门。别人只能等你用完。二、悲观锁的工作原理悲观锁的基本流程如下线程/事务申请锁获取成功后进入临界区执行业务操作提交事务并释放锁其他线程继续执行流程示意线程A加锁 → 操作 → 解锁 线程B等待 → 加锁 → 操作 → 解锁本质上同一时间只允许一个线程操作共享资源。三、悲观锁的主要实现方式1. 数据库层面的悲观锁在数据库中悲观锁主要通过SELECT ... FOR UPDATE实现。示例MySQLSELECT*FROMaccountWHEREid1FORUPDATE;特点查询时直接加行锁事务提交后释放其他事务无法修改该行适用于高并发写场景。2. Java 中的悲观锁synchronizedsynchronized是 Java 中最经典的悲观锁实现。示例publicsynchronizedvoidadd(){count;}特点自动加锁和释放阻塞式等待性能稳定3. ReentrantLock显式锁ReentrantLock属于更灵活的悲观锁。示例LocklocknewReentrantLock();lock.lock();try{count;}finally{lock.unlock();}优势可中断可超时支持公平锁四、悲观锁 vs 乐观锁理解悲观锁必须对比乐观锁。对比维度悲观锁乐观锁并发态度悲观乐观是否加锁是否通常冲突处理阻塞等待重试性能稳定高并发下更优实现方式锁机制CAS / 版本号一句话总结冲突多用悲观锁冲突少用乐观锁。五、悲观锁的典型使用场景1. 高冲突写场景例如库存扣减账户转账秒杀下单这些场景下写多、冲突多、数据敏感。适合使用悲观锁。2. 对一致性要求极高的系统例如金融系统支付系统订单系统不能出现脏数据宁可慢一点。六、实战案例库存扣减1. 错误示例无锁if(stock0){stock--;}可能导致超卖。2. 悲观锁实现publicsynchronizedbooleanreduceStock(){if(stock0){stock--;returntrue;}returnfalse;}保证同一时间只有一个线程执行。七、悲观锁的优缺点分析优点实现简单数据安全性高不容易出错逻辑清晰缺点并发性能较差容易产生阻塞可能导致死锁吞吐量受限八、使用悲观锁的注意事项1. 控制锁的粒度锁太大性能差锁太小复杂度高建议尽量缩小锁范围。2. 避免死锁常见死锁原因锁顺序不一致嵌套锁建议统一加锁顺序。3. 减少锁持有时间锁内代码越少越好。不要在锁里做网络请求IO 操作复杂计算九、面试常见问题1. 什么是悲观锁答操作前先加锁假设一定发生冲突。2. 什么时候用悲观锁答高并发写、多冲突、强一致场景。3. 悲观锁一定安全吗答逻辑正确前提下安全但可能死锁。参考悲观锁和乐观锁 - 迷失的布莱克 - 博客园Java并发常见面试题总结中

相关新闻

基于 ESP32 的智能太阳能充电宝电量管理系统设计与实现(绿色能源方向)

基于 ESP32 的智能太阳能充电宝电量管理系统设计与实现(绿色能源方向)

引言 在双碳目标推动下,绿色便携能源设备成为消费电子领域的重要发展方向。传统太阳能充电宝仅具备基础的充电 / 放电功能,缺乏精准的电量管理和智能保护机制。本文基于 ESP32 芯片设计了一款智能太阳能充电宝电量管理系统,实现太阳能充电控制、电量精准监测、状态可视化显…

2026/7/3 3:38:12 阅读更多 →
【图像分割】改进的算术优化算法(IAOA)的图像多阈值分割附Matlab代码

【图像分割】改进的算术优化算法(IAOA)的图像多阈值分割附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/5/17 4:49:50 阅读更多 →
测完这批工具 10个AI论文工具测评:专科生毕业论文+开题报告高效写作指南

测完这批工具 10个AI论文工具测评:专科生毕业论文+开题报告高效写作指南

对于专科生而言,毕业论文和开题报告的写作往往面临时间紧、任务重、资料难找等多重挑战。如何高效完成高质量的学术内容,成为许多学生亟需解决的问题。为此,我们基于2026年的实测数据与真实用户反馈,对当前市面上10款主流AI论文工…

2026/7/4 1:07:39 阅读更多 →

最新新闻

RestFB版本升级指南:从旧版本迁移到最新API的最佳实践

RestFB版本升级指南:从旧版本迁移到最新API的最佳实践

RestFB版本升级指南:从旧版本迁移到最新API的最佳实践 【免费下载链接】restfb RestFB is a simple and flexible Facebook Graph API client written in Java. 项目地址: https://gitcode.com/gh_mirrors/re/restfb RestFB是Java开发者连接Facebook Graph A…

2026/7/4 5:18:28 阅读更多 →
人大金仓数据库Linux安装超详细指南

人大金仓数据库Linux安装超详细指南

🔥关注墨瑾轩,带你探索编程的奥秘!🚀 🔥超萌技术攻略,轻松晋级编程高手🚀 🔥技术宝库已备好,就等你来挖掘🚀 🔥订阅墨瑾轩,智趣学习不…

2026/7/4 5:18:28 阅读更多 →
PMSM伺服控制三环架构设计与实现详解

PMSM伺服控制三环架构设计与实现详解

1. PMSM伺服控制系统仿真全解析永磁同步电机(PMSM)作为工业自动化领域的核心执行元件,其高性能伺服控制一直是工程师们面临的挑战。今天我将分享一个完整的三环控制架构实现方案,从理论框架到代码实现,再到参数整定技巧…

2026/7/4 5:18:28 阅读更多 →
如何用Auto-PPT免费生成专业PPT?3分钟快速上手教程

如何用Auto-PPT免费生成专业PPT?3分钟快速上手教程

如何用Auto-PPT免费生成专业PPT?3分钟快速上手教程 【免费下载链接】Auto-PPT Auto generate pptx using gpt-3.5, Free to use online / 通过gpt-3.5生成PPT,免费在线使用 项目地址: https://gitcode.com/gh_mirrors/au/Auto-PPT 你是否厌倦了花费数小时制作…

2026/7/4 5:16:27 阅读更多 →
揭秘E-Viewer架构设计:UWP应用如何高效处理e-hentai数据请求

揭秘E-Viewer架构设计:UWP应用如何高效处理e-hentai数据请求

揭秘E-Viewer架构设计:UWP应用如何高效处理e-hentai数据请求 E-Viewer作为一款专为e-hentai.org打造的UWP客户端,其架构设计充分考虑了数据请求效率与用户体验优化。本文将深入剖析其模块化架构、数据处理流程及性能优化策略,揭示这款应用如…

2026/7/4 5:16:27 阅读更多 →
《大模型实战指南》—— 面向软件开发者的系统性入门2

《大模型实战指南》—— 面向软件开发者的系统性入门2

第二章 大模型如何工作:从 Token 到 Transformer“Transformer 不是魔法,而是一套精心设计的信息路由系统。”—— 本书作者 _abab2.1 整体流程概览:一条文本的旅程当你向大模型输入一句 “你好,今天天气怎么样?”&…

2026/7/4 5:14:27 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布,这是一个关键的安全修复版本,修复了多个方面的问题,还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出,mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器,与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻