概念
乐观锁:乐观锁实在执行线程任务时,不会直接加锁,而是在数据记录中添加一个版本号。当事务需要更新数据时,它会检查版本号是否与之前读取时相同。如果相同,则执行更新操作;如果不同,则说明有其他事务在此期间修改了数据,当前事务需要重新执行读取和更新操作。
悲观锁:悲观锁是在执行线程任务时直接加锁,以确保同一时刻只有一个线程可以访问共享资源。确保其他事务无法访问这些数据,直到锁被释放
使用场景:
- 乐观锁:在商品库存表中,商品销售频繁,在更新库存信息时采用乐观锁。我们采用的方法是:给库存表的数据表添加一个标识字段——版本号(version),在每次执行入库的sql语句时,在执行条件中添加一个where条件判断version是否与之前读取的一致,如果满足,则修改对应内容以及版本号更新(如+1),如果不满足,则事务回滚,重新执行。
- 悲观锁:在一个银行转账系统中,转账操作涉及从一个账户扣除金额并添加到另一个账户。这种操作对数据的一致性要求非常高,因为同时进行的转账操作可能会导致错误的余额计算。在这种情况下,可以使用悲观锁。当一个转账操作开始时,系统会锁定涉及的账户记录,确保在此期间其他转账操作无法修改这些记录。直到转账操作完成并释放锁后,其他事务才能继续进行。