乐观锁悲观锁

这两种锁用来控制并发,不仅仅是用在数据库中。但是数据库中比较常见,我们用数据库来理解。

悲观锁:

假设冲突一定会发生,所以在操作的一开始就对数据加锁。 比如 oracle 中select for update。 加上锁以后,别人无法再对该资源进行更改(可读不可写)。

乐观锁

假设冲突不一定会发生,所以只要在准备更改的时候才对数据加锁。流程如下:

1. 读取数据
2. 业务处理
3. 更新数据并写回数据库
    3.1 发现DB中的数据跟自己读的时候不一样了,知道有冲突
    3.2 发现DB中的数据没有变,加锁更新
原文地址:https://www.cnblogs.com/kramer/p/6054203.html