秒杀并发处理

加事务注解;

@Transactional

先修改商品库存量,update

之后查询商品库存量是否大于0,若是小于则,rollback(TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();)

保证查询准确,for update(行级锁,属于悲观锁。commit 或 rollback 释放锁定)

 

 

 

乐观锁

CAS(Compare and Swap),会出现ABA的问题;在一个线程查询时,其它线程做了多次改动数据的操作,加一又减一,最终未发现数据是否改变。未解决ABA问题,可在sql语句上改变,任何线程操作都将改变sql数据固定值递增,或递减。这样线程在操作数据时,可带着固定值进行判断是否已经改变过了。

select version from activity where id=1

update activity set a=2,version =version+1 where id =1  and version=1
乐观锁相较于悲观锁,效率高。

 

 

同步锁

synchroized

 

乐观是真的乐观,就是简单的CAS,在出现ABA的情况下,乐观锁就要改变了,比如sql,

悲观锁,就都认为我要rollback,每条我都看一下是否要rollback,判断一下,这样效率当然就低了

同步锁:轻量级锁,偏向锁,自旋锁,重量级锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值