新闻详情

新闻详情

首页 / 资讯中心 / 详情

各种锁的分类讲解

发布时间:2026/9/26 11:13:33来源:尧图网络
各种锁的分类讲解
使用各种锁的过程中由于种类太多分不清各种锁到底是什么层面的、底层逻辑有很多很像但是为什么要有这么多种下面按不同视角进行区分视角 1【作用域视角】JVM 内锁进程内锁同一个 JVM多线程之间。 synchronized、ReentrantLock、读写锁、StampedLock、Semaphore、CAS数据库锁数据库引擎层面数据库服务内部多个事务之间。 表锁、行锁、间隙锁、临键锁、意向锁、MDL 元数据锁、全局锁分布式锁跨进程 / 跨机器多个不同 JVM、不同服务实例、集群之间互斥。 Redis 锁、ZK 锁、etcd 锁、数据库实现的分布式锁视角 2【并发思想视角悲观 / 乐观】悲观锁默认一定会发生并发冲突访问资源前先上锁阻止别人进来。JVMsynchronized、ReentrantLockMySQLfor update 行 X 锁、lock in share mode 行 S 锁、表锁分布式Redis/ZK 分布式锁乐观锁认为冲突很少不上阻塞锁提交的时候校验冲突失败重试。JVMCASAtomic 系列、LongAdderMySQL业务 version 版本号乐观锁视角 3【访问权限视角共享 / 排他】锁的行为规则定义拿到锁之后其他人能不能读 / 写排他锁X 锁写锁持有者独占别人读、写全部阻塞 synchronized、ReentrantLock、for update 行锁、MDL 写锁、Redis 分布式锁共享锁S 锁读锁多个持有者可以同时持有写操作会阻塞 ReentrantReadWriteLock 读锁、lock in share mode、MDL 读锁组合读写锁 一把锁内部包含「共享读锁 排他写锁」视角 4【锁粒度视角】数据库锁专属视角控制锁多少数据只用于 MySQL InnoDB全局锁锁整个实例所有表表级锁锁整张表普通表 S/X 锁、意向锁 IS/IX、MDL 元数据锁行级锁锁索引记录记录锁 Record Lock锁一条记录间隙锁 Gap Lock锁索引之间的空隙RR 级别防幻读临键锁 Next-Key Lock 记录锁 间隙锁RR 默认行锁算法视角 5【锁的能力特性视角】附加属性所有锁通用标签这一组是属性标签给锁打勾不是分类。可重入同一个持有者可以多次加锁synchronized、ReentrantLock、Redisson 锁 ✅StampedLock、原生 ZK 锁 ❌公平 / 非公平公平 排队先来先得非公平 允许插队吞吐更高可中断等待锁的时候可以响应线程中断ReentrantLock ✅synchronized ❌支持超时获取tryLock (time)拿不到锁不等了视角 6【实现层面内核锁 vs 业务逻辑锁】底层内核锁操作系统 / JVM / 数据库引擎原生提供操作系统内核参与阻塞。 synchronized、ReentrantLock、MySQL 行锁表锁业务逻辑锁没有底层阻塞锁完全靠业务代码、中间件 API 实现。 CAS、版本号乐观锁、Redis 分布式锁、ZK 分布式锁关键理解不要把「视角」和「锁实体」混在一起举个例子拆解你感受多维标签InnoDB Next-Key 临键锁视角 1作用域数据库锁视角 2思想悲观锁视角 3权限排他锁视角 4粒度行锁Next-Key特性不可重入只在 RR 隔离级别生效
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Python 读取 SQLite 数据:TaoToken 统一 Key 接入与 settings.json 配置骨架 2026/9/26 13:39:47

Python 读取 SQLite 数据:TaoToken 统一 Key 接入与 settings.json 配置骨架

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

阅读更多 →
昇腾 Atlas 300V 部署 YOLO 实战:从 ONNX 转换到推理调优 2026/9/26 13:39:47

昇腾 Atlas 300V 部署 YOLO 实战:从 ONNX 转换到推理调优

先说结论:Atlas 300V 24G 确实是运算加速卡,但它不是显卡,更不是拿来打游戏、跑 CUDA 的那类卡。很多人第一次看到“24G”这个数字,第一反应都是“那我是不是能直接用它跑大模型了?”,实际拿到手才会发现&a…

阅读更多 →
libcurl与OpenSSL开发库配置指南:32位和64位选型、编译与排错 2026/9/26 13:39:41

libcurl与OpenSSL开发库配置指南:32位和64位选型、编译与排错

简介:这份资源面向需要在 Windows 平台进行 HTTPS 网络通信开发的 C/C 程序员,提供实测可用的 libcurl 与 OpenSSL 动态开发库,同时包含 32 位与 64 位两个版本,可解决跨架构编译时库文件不匹配、链接失败等常见问题。压缩包共 34…

阅读更多 →
treg 与 OpenRouter、MCP 协议:CLI Agent 工具链调度实战指南 2026/9/26 13:39:41

treg 与 OpenRouter、MCP 协议:CLI Agent 工具链调度实战指南

1. 从 "treg" 这个标题说起:一个被低估的 CLI Agent 工具链第一次看到 "treg" 这个词,很多人会以为是某个库的缩写或者拼写错误。但如果你最近在折腾 AI Agent 相关的命令行工具,尤其是围绕 OpenRouter、MCP 协议、Codex…

阅读更多 →
SpringBoot+SSM课堂教学实时评价系统毕业设计实战解析 2026/9/26 13:39:41

SpringBoot+SSM课堂教学实时评价系统毕业设计实战解析

一直有朋友问我,毕业设计选“课堂教学效果实时评价系统”这类题目到底怎么落地,尤其题目里还带了SpringBoot和SSM两个关键词,代码倒是能跑,但一写论文就不知道从哪下笔。我今年刚好完整跟了一个类似的系统,从前期的需求…

阅读更多 →
claude cli 配 TaoToken 后 cc switch 报 There is an issue with the selected model 的排查与配置修正 2026/9/26 13:39:40

claude cli 配 TaoToken 后 cc switch 报 There is an issue with the selected model 的排查与配置修正

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

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉