一:互斥锁
现象:并发多个线程访问同一个资源的时候,导致数据异常;
解决问题:互斥锁即同一个资源被一个线程访问;
二:分布式锁(秒杀,抢券)
思路:
- 多线程请求redis,查询key标志,key存在即被锁,key不存在未锁,可抢锁;value=1表示已锁;value=0表示未锁;
- 加锁过程需要设置 过期时间 以及 续命子线程;
过期时间:防止线程1加锁后,客户端或redis宕机,锁无法释放;
续命子线程:防止设置的过期时间不合理,还没有操作完就已经被释放;预期当key执行小于1/3时进行添加过期时间;
三:JVM锁
四:悲观锁(互斥同步锁)与 乐观锁
https://www.bilibili.com/video/BV1V741127P8?spm_id_from=333.337.search-card.all.click