在上一篇文章java主流锁之悲观锁和乐观锁中,我们已经知道了什么是乐观锁和悲观锁以及他们的实现方式和使用场景。
现在就来简单模拟实现悲观锁和乐观锁
悲观锁
首先在数据库中创建一张goods 表
向数据库中插入一条记录
如果要进行减少count 操作的话,则首先查询出count 数量,若count 数量大于0,则可以进行修改操作。悲观锁是在查询的时候就将该条记录锁定
此时其他的客户端只能进行查询操作,而无法进行其他任何操作
只有等拿到锁的客户端提交事务,另一个客户端才可以再对其进行修改等操作
乐观锁
首先在数据库中创建goods 表,但是与悲观锁不同的是在创建表的时候添加一个version 字段
向goods 表中插入一条记录
此时如果要减少count 的话,则首先查询出count 数量,若count 数量大于0,则可以进行修改操作
此时另外开启一个MySQL 客户端,进行同样的修改操作,因为版本号不一致,所以修改失败
此时用正确的版本号去修改,可以看到修改成功