黑马day11 悲观锁&乐观锁

来源:互联网 发布:获取二维码扫描枪数据 编辑:程序博客网 时间:2024/04/24 17:18
悲观锁:悲观锁悲观的认为每一次操作都会造成更新丢失问题,在每次查询时就加上排他锁
乐观锁:乐观锁会乐观的认为每次查询都不会造成更新丢失.利用一个版本字段进行控制
 查询非常多,修改非常少,使用乐观锁

 修改非常多,查询非常少,使用悲观锁


第一张图的解释:

小zhang想在一个游戏网站买装备,此时游戏网站会去重定向到银行(假设是建设银行),然后银行再重定向会这个游戏网站.

但是小zhang点击充值的时候由于网页很慢,点击了好几下.....这个时候为了防止银行的钱过多的充值到小zhang的用户,银行会

设置一个callback属性,看这个属性的值如果是1了就不打钱了,如果检测到callback的值是0就打钱给小zhang。实际操作中,

会出现多线程的查询。假设有个order表还有一个account表。order表中有id account_id state money属性,account中有id money属性。如果打钱给了小zhang,那么order表中的state设置为1,表明已经打钱给了小zhang,然后设置money=money+100,假设银行查询了向此,第一次查询到用户的state是,0,money是0,那么就打钱,第二次检测到了state是1就不会打钱了。但是程序是并发的,第一次检查用户状态是0,然后并发到第二次查询,一看是也是0,那么就会出现问题。都是用查询那个隔离机制都不能控制了,这时候我们使用悲观锁,加上排它锁,其他就不能进来了.或者使用乐观锁,设置version的值



0 0
原创粉丝点击