乐观锁算线程同步吗?

悲观锁是查询时加锁,然后下面的流程锁住,别的线程不可以访问,当前面的线程完成后释放锁,这是让线程同步了。那乐观锁,算同步吗,因为两个线程还是可以同时查询,只是修改时,version不对的会被打回?

算同步,但它是"不堵门的同步"。

你的观察非常准确------这是理解两种锁本质区别的关键。


同步 ≠ 必须阻塞等待

同步的本质 是:协调多个线程对共享资源的访问,保证最终结果正确。

至于怎么协调,有两种思路:

悲观锁 乐观锁
策略 先假设会冲突,提前堵门 先假设不会冲突,事后检查
协调方式 阻塞式同步 --- 没轮到的线程挂起等待 非阻塞式同步 --- 失败的线程自己重试或放弃
线程体验 "都给我排队,一个一个来" "你们都去试,撞车了自行解决"

为什么乐观锁也算同步?

回到你的审核场景:

复制代码
线程A查询 → 状态待审核,版本=1
线程B查询 → 状态待审核,版本=1

线程A提交 → UPDATE ... WHERE 版本=1 → 成功,版本变成2
线程B提交 → UPDATE ... WHERE 版本=1 → 失败(版本已经是2了)

虽然 A 和 B 同时查到了旧数据 ,但数据库最终只让 一个线程修改成功

这就是同步------系统通过版本号机制,在写操作这一步强制达成了"同一时刻只有一个线程能真正修改成功"的效果

另一个线程被打回,要么重试(重新查询最新版本再改),要么直接报错退出。


一句话总结

悲观锁 = 同步靠"保安堵门"(互斥)
乐观锁 = 同步靠"事后对账"(冲突检测)

两者都解决了竞态条件,只是悲观锁在入口处排队,乐观锁在出口处筛选。最终都是让系统从"可能同时审核两次"变成"只会审核一次"。

相关推荐
2302_1118 分钟前
java依赖小结
java·运维·数据库
sunshine22 girl10 分钟前
Java学习三 高级语法3, 方法
java·学习
YMWM_22 分钟前
查看realsense相机序列号脚本
开发语言·python·数码相机
captain37640 分钟前
网络原理(3)-TCP核心机制连接管理▲▲▲
java·服务器·网络·ide·网络协议·tcp/ip·java-ee
传奇开心果编程43 分钟前
【dioxus0.7基础语法学与练】第8课:RSX 宏 — Dioxus 声明式 UI 语法
开发语言·学习·rust
HEJOO91 小时前
JVM 参数调优实战指南
jvm
企业数字化笔记1 小时前
固定资产历史数据怎么导入系统?Excel模板、字段映射和数据校验
android·java·数据库·后端
troy1281 小时前
Python 基础语法(一):变量、数据类型与运算符
java·服务器·python
wuyk5551 小时前
18.Kruskal 算法:用最短的边连成一张网
开发语言·算法·图论
Evand J1 小时前
【MATLAB例程,图像降噪7】高斯加权滑动窗口滤波,用于图像降噪,带质量评价,附代码下载链接
开发语言·图像处理·matlab·滑动窗口·滤波·降噪·图像滤波