乐观锁和悲观锁区别

1.并发控制

当程序中可能出现并发时,就需要一些操作来避免并发导致的数据不准确问题
这是没有并发控制
在这里插入图片描述
如果要实现并发控制,主要方式可以分为乐观并发控制,悲观并发控制两种.
其实无论是悲观锁还是乐观锁都是人们定义出来的概念,是一种思想.

2.悲观锁

悲观锁是对数据的修改抱着一种悲观态度的并发控制方式,一般都是认为数据被并发修改的概率较大,就会使用悲观锁
先上图:
在这里插入图片描述
当线程A获取到表数据时,线程B会堵塞,只有等线程A完成整个事务以后,线程B才可以访问,避免了报名人数数值不准确
总结:
悲观锁采用的是「先获取锁再访问」的策略,来保障数据的安全。但是加锁策略,依赖数据库实现,会增加数据库的负担,且会增加死锁的发生几率。此外,对于不会发生变化的只读数据,加锁只会增加额外不必要的负担。在实际的实践中,对于并发很高的场景并不会使用悲观锁,因为当一个事务锁住了数据,那么其他事务都会发生阻塞,会导致大量的事务发生积压拖垮整个系统。

乐观锁

乐观锁相对悲观锁而言放宽松了对数据库的加锁行为,乐观锁不会可以用数据库本身的锁机制,而是依赖数据本身来保证数据的正确性
可以再表中新增一个字段:版本号 用作标识符,再进行更新数据的时候把版本号+1
上图:
在这里插入图片描述
如图所示如果依次修改的情况下就不会出现异常
异常版本:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46837596/article/details/108188367