乐观锁与悲观锁全深度解析:原理、实践与选型
在并发控制领域,乐观锁和悲观锁是两种最根本的策略。它们代表了两种截然不同的假设:悲观锁假设冲突总会发生,因此事先加锁;乐观锁假设冲突很少发生,因此先执行操作,提交时再检查冲突。本文从原理、特性、优缺点、使用场景、代码实现到进阶实践进行全面对比,帮助你在不同业务场景下做出正确选择。1. 基础内容介绍1.1 悲观锁悲观锁(Pessimistic Locking)是一种保守的并发控制策略。它假定每次数据访问都会发生冲突,因此在读取数据时就对其加锁,阻止其他事务并发修改,直到当前事务结束才释放锁。实现方式:数据库层面:SELECT ... FOR UPDATE对查询到的行加排它锁;LOCK TABLE加表级锁。应用层面:使用synchronized或ReentrantLock对代码块加锁。分布式层面:使用 Redis、ZooKeeper 等实现分布式互斥锁。锁粒度:可以锁定单行、多行、表甚至整个数据库。1.2 乐观锁乐观锁(Optimistic Locking