黑马点评项目实战(四)——商品超卖问题

一 超卖问题

image-20250216144807538

二 悲观锁与乐观锁

悲观锁

  • 认为线程安全问题一定会发生,因此在操作数据之前先获取锁,确保线程串行执行。
  • 例如Synchronized、Lock都属于悲观锁。

乐观锁

  • 认为线程安全问题不一定会发生,因此不加锁,只是在更新数据时去判断有没有其他线程对数据做了修改。
  • 如果没有修改则认为是安全的,自己才更新数据。
  • 如果已经被其他线程修改说明发生了安全问题,此时可以重试或异常。

三 乐观锁

乐观锁的关键是判断之前查询得到的数据是否有被修改过。

但是存在成功率低的问题。

版本号法

image-20250216145309648 image-20250216145323789

CAS法(Compare and Set)

image-20250216145514582