线程安全问题
同时查询数据库剩余库存时,两个线程同时查询到剩余库存唯一,于是发生了超卖的安全问题
解决方法加锁
悲观锁
优点:简单粗暴
缺点:性能一般
乐观锁
在执行更新的时候判断数据是否被修改了,完成锁的功能
优点:性能好
缺点:存在成功率低的问题(?多线程访问容易出现)
乐观锁的两种实现方式
版本号实现方式
在需要变更的数据增加版本号字段,如果版本号不同不允许更新
CAS
判断需要变更的数据是否发生变化,如果变化不允许变更数据。
线程安全问题
同时查询数据库剩余库存时,两个线程同时查询到剩余库存唯一,于是发生了超卖的安全问题
解决方法加锁
悲观锁
优点:简单粗暴
缺点:性能一般
乐观锁
在执行更新的时候判断数据是否被修改了,完成锁的功能
优点:性能好
缺点:存在成功率低的问题(?多线程访问容易出现)
乐观锁的两种实现方式
版本号实现方式
在需要变更的数据增加版本号字段,如果版本号不同不允许更新
CAS
判断需要变更的数据是否发生变化,如果变化不允许变更数据。