java主流锁之悲观锁和乐观锁的简单模拟实现

在上一篇文章java主流锁之悲观锁和乐观锁中,我们已经知道了什么是乐观锁和悲观锁以及他们的实现方式和使用场景。

现在就来简单模拟实现悲观锁和乐观锁

悲观锁

首先在数据库中创建一张goods 表
创建goods表
向数据库中插入一条记录
插入数据
如果要进行减少count 操作的话,则首先查询出count 数量,若count 数量大于0,则可以进行修改操作。悲观锁是在查询的时候就将该条记录锁定
开启事务
此时其他的客户端只能进行查询操作,而无法进行其他任何操作
阻塞
只有等拿到锁的客户端提交事务,另一个客户端才可以再对其进行修改等操作
commit
修改成功

乐观锁

首先在数据库中创建goods 表,但是与悲观锁不同的是在创建表的时候添加一个version 字段
创建goods表
向goods 表中插入一条记录
添加记录
此时如果要减少count 的话,则首先查询出count 数量,若count 数量大于0,则可以进行修改操作
查询库存
修改
此时另外开启一个MySQL 客户端,进行同样的修改操作,因为版本号不一致,所以修改失败
修改失败
此时用正确的版本号去修改,可以看到修改成功
修改成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值