项目中遇到的悲观锁和乐观锁

悲观锁:

悲观锁就是假设每次操作都会有其他人使用同一个资源, 所以每次执行过程都是; 加锁-->使用资源-->释放锁, 项目中常使用synchronized对需要的代码部分加锁。

使用synchronized主要是因为synchronized使用的是内置锁, 加锁和解锁都由jdk实现, 使用者无需手动控制, 比较方便。

使用场景多是多线程开发时, 并行处理数据, 对方法或者代码块使用。

在使用时, 可尽量减少synchronized修饰的方法或代码块中的代码, 减少资源消耗。

 

乐观锁:

相对于悲观锁, 在并发量不大的小项目开发过程中比较常用乐观锁。 乐观锁是假设大多数操作情况下不会有其他人使用同一个资源。 执行过程一般是:获取资源快照-->使用资源-->确定资源没改变-->更新。

乐观锁主要由两种实现方式: 一种是版本号控制, 一种是CAS算法。 在日常开发中, 我比较常用前者。

使用场景如下:

在数据库表A中加字段x用于记录版本号,用户N需要修改A中某条记录

N打开信息编辑页面(打开页面时获取A表中某条记录数据),编辑页面字段并返回给后端(返回内容包括修改后的字段值和这条记录对应的版本号值)

后端获取数据库中对应记录中的版本号值, 与N前端返回回来的版本号值进行比较

如两个版本号一致, 则对版本号值加1, 同用户N修改后的值一起update。

以上这种方式并不是完全安全的, 所以只是用在并发不大且对数据要求不是特别严格的情况下。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值