并发
文章平均质量分 64
C18298182575
跳出舒适区
展开
-
Java并发(一):volatie与synchronized实现原理
上面提到过,volatile的实现是针对缓存行来进行操作的,而缓存行一般是64字节的,而往往一个变量可能不够8字节,那么就会导致一些不希望通知的数据也通知给了其他线程,这个数据也会被设置成无效状态(无效状态是整个缓存行无效),那么这个无关变量的使用效率就会降低,所以,我们需要缓存行填充,来让一个缓存行里面只有volatile变量和一些无关变量。当锁处于这个状态下,如果一个线程抢到了锁,那么其他线程都会被阻塞住,也就是被挂起,当持有锁的线程释放锁之后,才会去唤醒其他线程,被唤醒的线程会开始新一轮的抢锁。转载 2023-06-13 15:30:09 · 56 阅读 · 0 评论 -
记录一个Lock和sychronized应用及双检锁
synchronied场景:数据存入redis,并读取缓存。app用户读取,量较大逻辑1.先读取缓存,判断缓存中是否有值,有返回,无,继续执行2.对当前缓存类(CacheTemplateService)对象(this)加锁3.再次从缓存中获取数据,再次判断,有数据返回,无,继续执行为什么这里再次判断缓存中是否有锁,加入不判断,如果有大量请求等待持有锁(在synchronized处等待),当持有锁线程执行结束后(已写入缓存),就会有另外一个线程进入同步代码块,又会去查询数据库,写入缓存原创 2021-12-28 08:56:56 · 510 阅读 · 0 评论 -
synchronized
synchronized 原理概念:线程 对象 对象锁 对象的monitor,监视器锁所有对象都有一个monitor,线程访问,想持有对象锁时(占有monitor),判断monitor的值是否为0,是加锁成功,注意一个线程可多次对一个对象加锁成功,monitor累加,(可重入),其他线程想访问持有对象锁,判断是否为0,不是0,无法持有锁。自旋多线程访问synchronized修饰的内容时,一个持有锁,其他线程会“阻塞”,阻塞不好,涉及用户态内核态的切换解决:让等待锁的线程-忙循环,就是自原创 2021-12-28 09:28:16 · 135 阅读 · 0 评论 -
CountDownLatch的两种常用场景
CountDownLatch的两种使用场景先来看看 CountDownLatch 的源码注释;/***Asynchronizationaidthatallowsoneormorethreadstowaituntil*asetofoperationsbeingperformedinotherthreadscompletes.**@since1.5*@authorDougLea*/publicclassCountDow...转载 2021-02-08 11:04:47 · 303 阅读 · 0 评论 -
关于校验与确认两步操作时,新增,修改需要考虑的问题
业务场景1.有这样兑奖的活动,【活动1】小票满指定金额换奖品,【活动2】买饮料,瓶盖暗码兑奖第一步,【校验按钮】拍身份证图片,获取身份证信息;输入小票号或输入暗码,校验是否被使用过(查询是否存在记录);暗码是否有效(提前初始化到暗码表)第二步,【确认按钮】第一步校验通过,新增兑奖记录,更新暗码状态。风险点是小票号或暗码是否会被重复使用,类似并发问题异常场景1.同一个小票或者暗码,两个人同时操作,第一步都校验通过了(无记录),再去确认操作,可能导致,小票或暗码被重复使用,正常新增了记录原创 2020-08-26 19:40:25 · 468 阅读 · 0 评论 -
AsyncResult使用场景
场景从es查询商品信息,分批查询,5000个查询一次,再把每次查询结果汇总,如果分10次查询,正常查询每次返List<Product>,要等前一次查询返回结果后,才能执行下一次查询,汇总结果,是同步执行的过程。试想如果可以同时进行查询,之间互不影响,每个查询返回结构后,直接汇总,这样就大大节约了查询时间。AsyncResult作用就在这里。借用举例AsyncResult是...原创 2020-01-17 11:45:17 · 10354 阅读 · 2 评论 -
高并发下的订单与库存的处理
https://cloud.tencent.com/developer/article/1434176http://jblog.top/article/details/254951https://blog.csdn.net/qq315737546/article/details/76850173转载 2019-11-12 17:55:44 · 381 阅读 · 0 评论 -
用AtomicStampedReference/AtomicMarkableReference解决ABA问题
1、原子操作:http://www.blogjava.net/xylz/archive/2010/07/02/325079.html2、用AtomicStampedReference解决ABA问题:http://blog.hesey.net/2011/09/resolve-aba-by-atomicstampedreference.html3、高并发Java(4):无锁: http://www...转载 2019-09-23 11:20:58 · 529 阅读 · 0 评论 -
重入锁
相信大家在工作或者面试过程中经常听到重入锁这个概念,或者与关键字 synchrozied 的对比,栈长面试了这么多人,80%的面试者都没有答对或没有答到点上,或者把双重效验锁搞混了,哭笑不得。。那么你对重入锁了解有多少呢?今天,栈长帮大家撕开重入锁的面纱,来见识下重入锁的真实容颜。。什么是重入锁java.util.concurrent.locks.ReentrantLock这个...转载 2019-07-04 16:12:43 · 109 阅读 · 0 评论 -
Java并发编程之ThreadLocal详解
版权声明:本文为博主原创文章,转载前请获得博主许可。 https://blog.csdn.net/qq_38293564/article/details/80459827ThreadLocal简介变量值的共享可以使用public static的形式,所有线程都使用同一个变量,如果想实现每一个线程都有自己的共享变量该如何实现呢?JDK中的ThreadLocal类正是为了解决这样的问题。Thr...转载 2019-07-03 17:40:31 · 146 阅读 · 0 评论 -
大白话聊聊Java并发面试问题之Java 8如何优化CAS性能?
一、前情回顾上篇文章给大家聊了一下volatile的原理,具体参见:大白话聊聊Java并发面试问题之volatile到底是什么?。这篇文章给大家聊一下java并发包下的CAS相关的原子操作,以及Java 8如何改进和优化CAS操作的性能。因为Atomic系列的原子类,无论在并发编程、JDK源码、还是各种开源项目中,都经常用到。而且在Java并发面试中,这一块也属于比较高频的考点,所以还...转载 2019-06-18 11:57:54 · 262 阅读 · 0 评论 -
高并发实战之幂等处理
原文:https://blog.csdn.net/u010412301/article/details/72843026一、背景1. 前端重复提交选中的数据,应该后台只产生对应这个数据的一个反应结果。2. 我们发起一笔付款请求,应该只扣用户账户一次钱,当遇到网络重发或系统bug重发,也应该只扣一次钱;3. 发送消息,也应该只发一次,同样的短信发给用户,用户会哭的;4. 创建业务订单,一次...转载 2019-01-18 17:27:37 · 152 阅读 · 0 评论 -
乐观锁实现高并发
场景:收货操作,对收货明细做修改操作,两个人同时对某一变量进行修改(a=10),都想在原来基础上+10,会存在两人同时修改,最终结果还是20,正确结果应该是30。实现:通过乐观锁实现修改实现方式:1,修改时把修改内容作为条件2,加版本号以上都需要先对数据进行查询,获取老数据的“修改内容”和版本号,以此作为修改的条件。代码1,实现方式通用mapper或者sql通用ma...原创 2019-01-24 18:45:02 · 792 阅读 · 0 评论 -
就是要你懂Java中volatile关键字实现原理
原文:https://www.toutiao.com/i6656727356847161859/?tt_from=mobile_qq&utm_campaign=client_share&timestamp=1550023968&app=news_article&utm_source=mobile_qq&iid=63023727700&utm_medi...转载 2019-02-13 10:27:07 · 183 阅读 · 0 评论 -
大型网站应用之海量数据和高并发解决方案总结一二!
https://mp.weixin.qq.com/s?__biz=MzUxOTAxODc2Mg==&mid=2247483781&idx=3&sn=19959b3978281e9bcadd7d19d8ecc178&chksm=f98141e0cef6c8f6d6d53da7886906308660b6aa820f5d1fc2b55721db23ce9bfa73fe1...转载 2019-03-05 14:57:27 · 298 阅读 · 0 评论 -
解决方案:如何防止数据重复插入
此文为转载,先说一个我在生产上真实存在的案例业务场景:我们做的是仓库管理系统,产线上需要零件的时候,首先生成一个拉动,我需要把拉动,生成拣货单,然后根据拣货单去拣货,上线。操作流程是:在web上选择多个拉动单,点击组单按钮,即可生产拣货单。但是存在这样一个问题:原来拉动单:拣货单 1:1,结果一个拉动单生成了多个拣货单,且生成的拣货单创建时间完全一样,但是操作人,不完全一样。分析原...转载 2019-04-24 17:45:08 · 5401 阅读 · 0 评论 -
Java内存模型与共享变量可见性
注:本文主要参考自《深入理解Java虚拟机(第二版)》和《深入理解Java内存模型》1、Java内存模型(JMM)Java内存模型的主要目标:定义在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。注意:上边的变量指的是共享变量(实例字段、静态字段、数组对象元素),不包括线程私有变量(局部变量、方法参数),因为私有变量不会存在竞争关系。1.1、内存模型就是一张图:说...转载 2019-05-06 10:25:07 · 121 阅读 · 0 评论 -
怎么对接口做幂等性操作?
一、幂等性概念在编程中.一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。例如,“getUsername()和setTrue()”函数就是一个幂等函数. 更复杂的操作幂等保证是利用唯一交易号(流水号)实现.我的理解:幂等就是一个操作,...转载 2019-06-21 15:04:02 · 7879 阅读 · 0 评论 -
大白话聊聊Java并发面试问题之谈谈你对AQS的理解?
要点:1,并发框架,实现加锁2,status(CAS实现);当前线程;等待队列一、写在前面上一篇文章聊了一下java并发中常用的原子类的原理和Java 8的优化,具体请参见文章:大白话聊聊Java并发面试问题之Java 8如何优化CAS性能?。这篇文章,我们来聊聊面试的时候比较有杀伤力的一个问题:聊聊你对AQS的理解?之前有同学反馈,去互联网公司面试,面试官聊到并发时就问...转载 2019-06-18 11:04:24 · 246 阅读 · 0 评论 -
项目中遇到生产事故追踪---重复组单
之前说生产重复组单的问题,之前只是前端重复提交控制,后台没有,会导致两个人同时操作导致并发。处理方式是后台加redis锁。通过测试环境测试,这种请求确实可以通过加锁解决,但是其他的生产脏数据的情况与此不同,并没有找到问题的根本原因。1,不同人,1:2,间隔1s;原因:双人双机处理;处理方式:加锁2,同一人,1:2,间隔30s;原因:未知3,同一人,1:4,间隔37...转载 2019-01-18 10:04:04 · 168 阅读 · 0 评论