悲观锁和乐观锁,应用中的案例,mysql 当中实现,java 中的实现

223 篇文章 0 订阅
119 篇文章 0 订阅

悲观锁(Pessimistic Locking)和乐观锁(Optimistic Locking)是两种处理并发数据访问的策略。

悲观锁

悲观锁假设在数据处理过程中,数据冲突发生的概率很大,因此在数据处理开始之前,就先将数据锁住,其他线程/事务在这段时间内不能对数据进行修改。

MySQL中的悲观锁

在MySQL中,可以使用SELECT ... FOR UPDATE语句来实现悲观锁。这个语句会锁定查询结果集中的每一行数据,其他事务在锁释放之前不能修改这些行。

案例:假设有一个电商网站,用户在购买商品时需要减少库存。为了避免多个用户同时购买导致库存超卖,可以使用悲观锁在更新库存前锁定库存记录。

Java中的悲观锁

在Java中,悲观锁可以通过synchronized关键字或Lock接口实现。这些机制会阻塞其他线程对共享资源的访问,直到当前线程完成操作并释放锁。

乐观锁

乐观锁假设在数据处理过程中,数据冲突发生的概率很小,因此不会直接锁定数据,而是在数据更新时检查是否有其他线程/事务修改了数据。

MySQL中的乐观锁

在MySQL中,可以使用版本号或时间戳来实现乐观锁。每次更新数据时,都检查版本号或时间戳是否发生变化,如果发生变化则拒绝更新。

更新后,需要判断受影响的行数,如果为0则表示有其他事务已经修改了数据,需要重新读取数据并尝试更新。

Java中的乐观锁

在Java中,可以使用CAS(Compare-And-Swap)操作或版本号等方式实现乐观锁。CAS是一种原子操作,用于比较并替换某个值,如果当前值与预期值相同,则替换为新值。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纵然间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值