JDBC基础——数据库乐观锁和悲观锁

考察点:数据库
参考回答:
悲观锁
悲观锁(Pessimistic Lock),顾名思义,就是很悲观,每次去拿数据的时候都认为别人会
修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会 block 直到它拿到锁。
悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。
Java synchronized 就属于悲观锁的一种实现,每次线程要修改数据时都先获得锁,保证同
一时刻只有一个线程能操作数据,其他线程则会被 block。
乐观锁
乐观锁(Optimistic Lock),顾名思义,就是很乐观,每次去拿数据的时候都认为别人不
会修改, 所以不会上锁, 但是在提交更新的时候会判断一下在此期间别人有没有去更新这个数据。
乐观锁适用于读多写少的应用场景,这样可以提高吞吐量。
乐观锁一般来说有以下 2 种方式:
使用数据版本(Version)记录机制实现,这是乐观锁最常用的一种实现方式。何谓数据版
本?即为数据增加一个版本标识,一般是通过为数据库表增加一个数字类型的 “version” 字
段来实现。当读取数据时,将 version 字段的值一同读出,数据每更新一次,对此 version 值加
一。当我们提交更新的时候,判断数据库表对应记录的当前版本信息与第一次取出来的 version
值进行比对,如果数据库表当前版本号与第一次取出来的 version 值相等,则予以更新,否则认
为是过期数据。
使用时间戳(timestamp)。乐观锁定的第二种实现方式和第一种差不多,同样是在需要乐
观锁控制的 table 中增加一个字段,名称无所谓,字段类型使用时间戳(timestamp), 和上面
的 version 类似, 也是在更新提交的时候检查当前数据库中数据的时间戳和自己更新前取到的时
间戳进行对比,如果一致则 OK,否则就是版本冲突。

理解:对于题目,参考回答已经讲解十分详细,也很容易理解。java中的各种有很多,读完这篇文章会对各种锁有更深层的理解
https://blog.csdn.net/renwei289443/article/details/79540809

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值