持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情
背景
-
凡是出现并发问题,第一个想到的就是锁。
-
什么是乐观锁?使用的场景是什么?
-
什么是悲观锁?使用的场景是什么?
过程
-
乐观锁 - 整个过程是没有上锁的
系统是一定需要支持事务的。在这样的条件下,对并发控制来说,使用乐观锁(乐观并发控制)。在读多写少的场景中,乐观锁是非常有效率的。多个线程可以同时读同样的数据。在这整个过程,会持续检测冲突,并防止多个线程尝试修改这同样的数据。整个过程中,只有一个线程会更新成功,其他会更新失败。更新失败的,会进行事务回滚,并且抛出异常。不上锁,性能高。
-
乐观锁理解的演示例子 Mysql在乐观锁层面解决并发问题
-
悲观锁 - 当拿到数据的一瞬间就上锁了的
跟乐观锁的差异就是:整个过程是上锁了的,因此性能低。表现就是不会抛出异常,因为整个过程就是阻塞,等待上一个线程释放锁,自己拿到锁,然后执行逻辑即可,直到不满足业务逻辑的时候,可能要抛出异常或者给出友好提示。 场景:写多读少,或者写和读一样频繁。
-
悲观锁理解的演示例子Mysql的select for update理解
小结
-
加上对乐观锁和悲观锁的理解。
-
熟练使用这样的原理来解决并发问题。
-
理解:在读多写少的场景下,使用乐观锁。在写多读少的场景下,使用悲观锁。