首页 > 其他分享 >juc 多线程 锁失效的三种情况 (多例.事务.集群)

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

时间:2023-02-02 10:24:40浏览次数:39  
标签: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里面可以配置动静分离,也可以配置反向代理

 

 

标签:juc,事务,超卖,多例,代理,线程,失效,多线程
From: https://www.cnblogs.com/ZhangZiXue/p/17085068.html

相关文章

  • 深入理解Java多线程(1) - Java并发编程的艺术
    今天深度学习一下《Java并发编程的艺术》的第1章并发编程的挑战,深入理解Java多线程,看看多线程中的坑。注意,哈肯的程序员读书笔记并不是抄书,而是将书中精华内容和哈肯的开发......
  • Qt实现多线程编程的两种方式
    Qt实现多线程编程的两种方式方式一:继承自QThread类,覆写run函数。此实现方法只有run函数内的代码是运行在子线程内。代码示例:#ifndefQDEMOTHREAD_H#defineQDEMOTHREAD_H#i......
  • 【解决方案】多线程如何避免重复插入
    【先记录,日后完善验证】1、设置唯一键,如果是插入或更新操作可以增加trycatch,把更新的sql写在catch里面;2、synchornized关键字和lock接口,但是只能用于单机;4、多服务可......
  • 解决多线程中线程安全问题方式三
    importjava.util.concurrent.locks.ReentrantLock;/***解决多线程中线程安全问题方式三:调用Lock接口1.因为Lock是接口,无法直接使用,所以使用Lock的实现类ReentrantLo......
  • Java多线程:Future和FutureTask
    一、FutureFuture是一个接口,所有方法如下:上源码:packagejava.util.concurrent;publicinterfaceFuture<V>{booleancancel(booleanmayInterruptIfRunning);......
  • 多线程知识点
    1.理论产生死锁的四个条件互斥条件:一个资源同时只能被一个线程占用请求与保持条件:一个进程因请求资源而阻塞时,对已获得资源不释放不剥夺条件:一个进程已获得的资源,在不......
  • 使用Disruptor完成多线程下并发、等待、先后等操作
    Java完成多线程间的等待功能:场景1:一个线程等待其他多个线程都完成后,再进行下一步操作(如裁判员计分功能,需要等待所有运动员都跑完后,才去统计分数。裁判员和每个运动员都是一......
  • 什么是JUC
    什么是JUC与线程和进程一、什么是JUC面试高频问javautilconcurrentjava.util工具包包、分类业务:普通的线程代码ThreadRunnable:没有返回值,效率相比Callable相对较低......
  • netcore之异步并不是多线程!
    1、遇到await,线程的变化遇到await会把当前线程返回且返回值就是await后面的Task,再从线程池随机取一个线程往下执行代码。我们使用封装好的异步方法模拟写入大量字符串的......
  • i++在多线程下的原子性问题
     staticinti=0;@TestvoidiTest()throwsInterruptedException{Threadt1=newThread(()->{for(intj=0;j<50000;......