乐观锁和悲观锁

目录

乐观锁

实现方式

悲观锁

实现方式

总结

乐观锁

乐观锁的情况就跟名字一样,该进程会十分乐观,乐观地认为别的进程不会和自己同时修改数据,因此乐观锁默认是不会上锁的,只有在执行更新的时候才会去判断在此期间别人是否修改了数据,如果别人修改了数据则放弃操作,否则执行操作。

实现方式

从上面的定义我们可以发现,乐观锁的实现方式和CAS是一致的,事实上乐观锁的实现方式之一就是使用CAS,另一种实现方式也是基于CAS的版本号控制,为了避免CAS机制的ABA问题(CAS机制和ABA问题在另一篇博客中有详细说明,再次不多描述。)

悲观锁

悲观锁,顾名思义,会很悲观地认为在自己修改数据的时候,一定会有另一个进程去修改该数据,因此悲观锁在操作数据的时候会直接把数据上锁,禁止其他进程操作该数据,只有在操作结束后才会解锁。

实现方式

悲观锁的实现方式也就是加锁,加锁既可以在代码层面(比如Java中的synchronized关键字),也可以在数据库层面(比如MySQL中的排他锁)。

总结

读取频繁使用乐观锁,写入频繁使用悲观锁。

因为读取的时候不对数据产生影响,因此不需要担心数据冲突等问题,可以采取乐观锁;

但在写入的时候可能会出现多个线程同时操作的问题,需要使用悲观锁来进行数据锁定,防止冲突。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值