一 超卖问题
二 悲观锁与乐观锁
悲观锁:
- 认为线程安全问题一定会发生,因此在操作数据之前先获取锁,确保线程串行执行。
- 例如Synchronized、Lock都属于悲观锁。
乐观锁:
- 认为线程安全问题不一定会发生,因此不加锁,只是在更新数据时去判断有没有其他线程对数据做了修改。
- 如果没有修改则认为是安全的,自己才更新数据。
- 如果已经被其他线程修改说明发生了安全问题,此时可以重试或异常。
三 乐观锁
乐观锁的关键是判断之前查询得到的数据是否有被修改过。
但是存在成功率低的问题。
版本号法
CAS法(Compare and Set)