悲观锁乐观锁小结
· 阅读需 2 分钟
一点点关于乐观和悲观锁的想法 简单记录一下..
悲观锁
就是很悲观的看待问题。
主观认为每次去拿数据都认为会被别人修改,所以每次拿数据的时候都会上锁,这样别人想拿到这个数据就会block直到它拿到锁。如果发生并发冲突,会屏蔽一切可能违反数据完整性的操作 悲观锁之所以悲观。就在于此。所以对商品加上锁,就可以安心的做判断和更新。因为这个时候不会有别人更新这条商品库存。Java synchronized就是悲观锁的一种实现,每次线程要修改数据时都会先获得锁 保证同一时刻只有一个线程 能操作数据 其他线程会被block(阻塞)
乐观锁
就是非常乐观的看待问题 无需加锁。
但是会在表中增加版本字段,更新时where语句中增加版本的判断 算是CAS (compare and swap)比较并替换的操作 在商品库存场景中number起到了版本控制 相当于 version 的作用 总的来说就是 假设不会发生冲突 只在提交操作时检查是否违反了数据的完整性 乐观锁适用于读多写少的应用场合。这样可以提高吞吐量
也有的会加时间戳。
实现分布式锁 : Redis 和 Zookeeper
浏览量:加载中...