juc 多线程 锁失效的三种情况 (多例.事务.集群)

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里面可以配置动静分离,也可以配置反向代理

 

 

posted @ 2023-02-02 10:13  lamda表达式先驱  阅读(74)  评论(0)    收藏  举报