悲观锁和乐观锁的区别

简介: 悲观锁和乐观锁的区别

悲观锁(Pessimistic Locking)和乐观锁(Optimistic Locking)是并发控制的两种不同思想。

悲观锁:

  • 假设并发环境下会发生冲突,所以在访问共享资源之前,会先获取锁来保护资源。
  • 当一个线程获得锁后,其他线程必须等待该线程释放锁才能继续执行。
  • 悲观锁通常使用互斥锁(如 synchronized 关键字、ReentrantLock)来实现,阻塞其他线程的执行,确保资源独占性。
  • 悲观锁的特点是安全可靠,但也可能导致线程阻塞和上下文切换的开销增加,降低并发性能。

乐观锁:

  • 假设并发环境下不会发生冲突,所以在访问共享资源之前,并不获取锁。
  • 当一个线程要更新资源时,首先读取资源的当前版本号或状态,然后进行操作,并尝试提交更新。
  • 提交更新时,会重新检查资源的版本号或状态,如果没有发生变化,则操作成功;否则,说明其他线程已经修改了资源,操作失败,需要进行相应处理(如重试)。
  • 乐观锁通常使用无锁算法(如CAS)或版本号来实现,并不阻塞其他线程的执行。
  • 乐观锁的特点是并发性好,无阻塞,但可能出现操作失败需要重试的情况。

悲观锁适用于写操作较多、冲突概率较高的场景,保证数据的一致性和安全性;而乐观锁适用于读操作较多、冲突概率较低的场景,提高并发性能。

需要根据具体场景和需求选择使用悲观锁还是乐观锁。在实践中,常常会将二者结合使用,根据情况选择最合适的并发控制方式。

目录
相关文章
|
3月前
|
存储 人工智能 测试技术
Hermes Agent:深度技术剖析报告
Hermes Agent 是Nous Research于2026年开源的自主AI智能体框架,首创“闭环学习回路”,通过五层记忆系统、自主技能生成(Skill)、辩证式用户建模(Honcho)与FTS5跨会话搜索,解决LLM“失忆症”。MIT许可,Python构建,支持多平台、多模型Provider及MCP双向集成,GitHub星标超1.7万。
1283 1
|
3月前
|
Java 关系型数据库 MySQL
10分钟零代码搭建Spring Boot项目:飞算JavaAI一键脚手架生成实战
本文演示如何用飞算JavaAI插件,10分钟快速生成标准Spring Boot 3.2项目:只需自然语言描述需求(如订单模块、MySQL、分页、Swagger等),一键生成含完整分层结构、MyBatis-Plus、全局异常处理的可运行工程,适合原型开发、技术验证与学习实践。
|
5月前
|
人工智能 自然语言处理 安全
Dify 官方上架 Higress 插件,轻松接入 AI 网关访问模型服务
Higress 官方推出 Dify 插件,已正式上架 Dify 插件市场。
709 52
|
9月前
|
Java 应用服务中间件 Maven
Spring Boot开发环境搭建和项目启动
本节讲解JDK配置、Spring Boot工程构建与启动,以及项目结构分析。涵盖IDEA中JDK、Maven、编码设置,快速创建Spring Boot项目,并介绍目录结构及简单Controller测试,助你快速上手开发。
|
4月前
|
开发框架 安全 Java
Java 长期支持版 JDK17 下载安装+详细配置步骤
JDK 17 是 Oracle 官方推出的长期支持(LTS)版本,具备高性能、高安全性、强兼容性与丰富新特性(如密封类、模式匹配等),广泛用于后端开发、微服务、大数据及教学实训,是企业级 Java 开发的主流稳定选择。(239字)
3308 0
|
7月前
|
机器学习/深度学习 人工智能 编解码
四款国产VLM OCR模型横评
春节前,DeepSeek、智谱、百度、腾讯四大团队密集开源新一代OCR小模型,全面采用视觉语言模型(VLM)架构,摒弃传统流水线,迈向“语义结构化”新纪元。DeepSeek-OCR2首创“视觉因果流”,GLM-OCR以0.9B参数登顶OmniDocBench榜首,PaddleOCR-VL-1.5攻克真实退化场景,Youtu-Parsing实现22倍推理加速——国产OCR正以架构创新实现垂直领域“换道超车”。
1322 4
|
7月前
|
机器学习/深度学习 JSON 文字识别
0.9B 小模型,OCR 大能力——GLM-OCR 模型实战教程
智谱开源多模态OCR模型GLM-OCR,基于GLM-V架构,融合CogViT视觉编码器与GLM-0.5B语言解码器,支持公式、表格、代码等复杂文档识别,性能达OmniDocBench榜首(94.62分),仅0.9B参数,轻量高效,开箱即用。
3835 3
|
9月前
|
存储 SQL Java
Spring Boot使用slf4j进行日志记录
本文介绍了在Spring Boot项目中使用SLF4J结合Logback进行日志管理的最佳实践。通过配置`application.yml`和`logback.xml`,实现日志级别、输出格式、文件滚动及存储路径的灵活控制。推荐使用SLF4J门面模式,避免直接调用具体日志实现,提升系统可维护性与扩展性。
|
Web App开发 人工智能 自然语言处理
快速掌握Dify+Chrome MCP:打造网页操控AI助手
本文教你如何快速搭建一个能操作浏览器的AI助手:通过Dify和Chrome MCP结合,只需三步配置,即可实现自动填表、数据抓取和网页操控,无需编写代码,用自然语言就能指挥AI完成各类网页任务。
|
JSON 运维 Ubuntu
Linux下如何使用Curl进行网络请求
希望这篇文章能帮助您在Linux下更好地使用Curl进行网络请求。如有疑问,请随时提问!
1051 10