乐观锁悲观锁
这两种锁用来控制并发,不仅仅是用在数据库中。但是数据库中比较常见,我们用数据库来理解。
悲观锁:
假设冲突一定会发生,所以在操作的一开始就对数据加锁。 比如 oracle 中select for update。 加上锁以后,别人无法再对该资源进行更改(可读不可写)。
乐观锁
假设冲突不一定会发生,所以只要在准备更改的时候才对数据加锁。流程如下:
1. 读取数据
2. 业务处理
3. 更新数据并写回数据库
3.1 发现DB中的数据跟自己读的时候不一样了,知道有冲突
3.2 发现DB中的数据没有变,加锁更新