java自己的 synchornized 和 lock锁都是悲观锁,默认一定有其他线程争抢并修改数据
乐观锁 默认没有别的线程来抢夺,修改数据 更适合读多的场景, 通过version控制版本号,活着cas算法
超卖问题
超卖问题,本质是第一次发送了100条查询请求,查到的都是5000条, 然后都符合判断逻辑,进去后执行了100次更新update操作更新为5000-1的操作.,最后结果应该是0-4950之间的随机值,并发问题非常严重
代理模式(传统spring 是jdk代理 springboot是cglib代理)
用了事务后, 锁失效概率低,但是还是失效了, 事务是用了aop的思想, 在方法开启前加锁
1. 开启事务->2.获取锁->3.查询库存->4,更新库存 ->5.释放锁->6.提交事务或者回滚事务
因为数据库的隔离级别一般是RR(可重复读) 或者 RC(读已提交)
-------
nginx 动静分离 反向代理 负载均衡
server里面可以配置动静分离,也可以配置反向代理
标签:juc,事务,超卖,多例,代理,线程,失效,多线程 From: https://www.cnblogs.com/ZhangZiXue/p/17085068.html