保健励志美文体育育儿作文
投稿投诉
作文动态
热点娱乐
育儿情感
教程科技
体育养生
教案探索
美文旅游
财经日志
励志范文
论文时尚
保健游戏
护肤业界

深入介绍Java中的锁(原理锁优化CASAQS)

  1、为什么要用锁?
  锁是为了解决并发操作引起的脏读、数据不一致的问题。
  2、锁实现的基本原理2。1、volatileJava编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致地更新,线程应该确保通过排他锁单独获得这个变量。Java语言提供了volatile,在某些情况下比锁要更加方便。
  volatile在多处理器开发中保证了共享变量的可见性。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。
  结论:如果volatile变量修饰符使用恰当的话,它比synchronized的使用和执行成本更低,因为它不会引起线程上下文的切换和调度。2。2、synchronized
  synchronized通过锁机制实现同步。
  先来看下利用synchronized实现同步的基础:Java中的每一个对象都可以作为锁。
  具体表现为以下3种形式。对于普通同步方法,锁是当前实例对象。对于静态同步方法,锁是当前类的Class对象。对于同步方法块,锁是Synchonized括号里配置的对象。
  当一个线程试图访问同步代码块时,它首先必须得到锁,退出或抛出异常时必须释放锁。
  2。2。1synchronized实现原理
  synchronized是基于Monitor来实现同步的。
  Monitor从两个方面来支持线程之间的同步:互斥执行协作
  1、Java使用对象锁(使用synchronized获得对象锁)保证工作在共享的数据集上的线程互斥执行。
  2、使用notifynotifyAllwait方法来协同不同线程之间的工作。
  3、Class和Object都关联了一个Monitor。
  Monitor的工作机理线程进入同步方法中。为了继续执行临界区代码,线程必须获取Monitor锁。如果获取锁成功,将成为该监视者对象的拥有者。任一时刻内,监视者对象只属于一个活动线程(TheOwner)拥有监视者对象的线程可以调用wait()进入等待集合(WaitSet),同时释放监视锁,进入等待状态。其他线程调用notify()notifyAll()接口唤醒等待集合中的线程,这些等待的线程需要重新获取监视锁后才能执行wait()之后的代码。同步方法执行完毕了,线程退出临界区,并释放监视锁。
  参考文档:https:www。ibm。comdeveloperworkscnjavajlosynchronized
  2。2。2synchronized具体实现1、同步代码块采用monitorenter、monitorexit指令显式的实现。2、同步方法则使用ACCSYNCHRONIZED标记符隐式的实现。
  通过实例来看看具体实现:publicclassSynchronizedTest{publicsynchronizedvoidmethod1(){System。out。println(HelloWorld!);}publicvoidmethod2(){synchronized(this){System。out。println(HelloWorld!);}}}
  javap编译后的字节码如下:
  monitorenter
  每一个对象都有一个monitor,一个monitor只能被一个线程拥有。当一个线程执行到monitorenter指令时会尝试获取相应对象的monitor,获取规则如下:如果monitor的进入数为0,则该线程可以进入monitor,并将monitor进入数设置为1,该线程即为monitor的拥有者。如果当前线程已经拥有该monitor,只是重新进入,则进入monitor的进入数加1,所以synchronized关键字实现的锁是可重入的锁。如果monitor已被其他线程拥有,则当前线程进入阻塞状态,直到monitor的进入数为0,再重新尝试获取monitor。
  monitorexit
  只有拥有相应对象的monitor的线程才能执行monitorexit指令。每执行一次该指令monitor进入数减1,当进入数为0时当前线程释放monitor,此时其他阻塞的线程将可以尝试获取该monitor。
  2。2。3锁存放的位置
  锁标记存放在Java对象头的MarkWord中。
  Java对象头长度
  32位JVMMarkWord结构
  32位JVMMarkWord状态变化
  64位JVMMarkWord结构
  2。2。3synchronized的锁优化
  JavaSE1。6为了减少获得锁和释放锁带来的性能消耗,引入了偏向锁和轻量级锁。
  在JavaSE1。6中,锁一共有4种状态,级别从低到高依次是:无锁状态、偏向锁状态、轻量级锁状态和重量级锁状态,这几个状态会随着竞争情况逐渐升级。
  锁可以升级但不能降级,意味着偏向锁升级成轻量级锁后不能降级成偏向锁。这种锁升级却不能降级的策略,目的是为了提高获得锁和释放锁的效率。
  偏向锁:
  无锁竞争的情况下为了减少锁竞争的资源开销,引入偏向锁。
  轻量级锁:
  轻量级锁所适应的场景是线程交替执行同步块的情况。
  锁粗化(LockCoarsening):也就是减少不必要的紧连在一起的unlock,lock操作,将多个连续的锁扩展成一个范围更大的锁。
  锁消除(LockElimination):锁削除是指虚拟机即时编译器在运行时,对一些代码上要求同步,但是被检测到不可能存在共享数据竞争的锁进行削除。
  适应性自旋(AdaptiveSpinning):自适应意味着自旋的时间不再固定了,而是由前一次在同一个锁上的自旋时间及锁的拥有者的状态来决定。如果在同一个锁对象上,自旋等待刚刚成功获得过锁,并且持有锁的线程正在运行中,那么虚拟机就会认为这次自旋也很有可能再次成功,进而它将允许自旋等待持续相对更长的时间,比如100个循环。另一方面,如果对于某个锁,自旋很少成功获得过,那在以后要获取这个锁时将可能省略掉自旋过程,以避免浪费处理器资源。
  2。2。4锁的优缺点对比
  2。3、CAS
  CAS,在Java并发应用中通常指CompareAndSwap或CompareAndSet,即比较并交换。
  1、CAS是一个原子操作,它比较一个内存位置的值并且只有相等时修改这个内存位置的值为新的值,保证了新的值总是基于最新的信息计算的,如果有其他线程在这期间修改了这个值则CAS失败。CAS返回是否成功或者内存位置原来的值用于判断是否CAS成功。
  2、JVM中的CAS操作是利用了处理器提供的CMPXCHG指令实现的。
  优点:竞争不大的时候系统开销小。
  缺点:
  【】循环时间长开销大。CAS长时间自旋不成功,给CPU带来很大的性能开销。解决方法:JVM能支持pause指令,效率会有一定的提升。
  【】只能保证一个共享变量的原子操作。对多个共享变量操作时,不能保证原子性。解决方法:加锁;共享变量合并成一个共享变量
  【】ABA的问题。解决方法就是:增加版本号,每次使用的时候版本号1,每次变量更新的时候版本号1。java提供AtomicStampzedReference来解决ABA问题。
  3、Java中的锁实现3。1、队列同步器(AQS)
  队列同步器AbstractQueuedSynchronizer(以下简称同步器),是用来构建锁或者其他同步组件的基础框架。
  3。1。1、它使用了一个int成员变量表示同步状态。
  3。1。2、通过内置的FIFO双向队列来完成获取锁线程的排队工作。同步器包含两个节点类型的应用,一个指向头节点,一个指向尾节点,未获取到锁的线程会创建节点线程安全(compareAndSetTail)的加入队列尾部。同步队列遵循FIFO,首节点是获取同步状态成功的节点。
  未获取到锁的线程将创建一个节点,设置到尾节点。如下图所示:
  首节点的线程在释放锁时,将会唤醒后继节点。而后继节点将会在获取锁成功时将自己设置为首节点。如下图所示:
  3。1。3、独占式共享式锁获取独占式:有且只有一个线程能获取到锁,如:ReentrantLock。lt;pregt;
  共享式:可以多个线程同时获取到锁,如:CountDownLatch
  独占式每个节点自旋观察自己的前一节点是不是Header节点,如果是,就去尝试获取锁。
  独占式锁获取流程:
  共享式:共享式与独占式的区别:
  共享锁获取流程:
  4、锁的使用用例4。1、ConcurrentHashMap的实现原理及使用
  ConcurrentHashMap类图
  ConcurrentHashMap数据结构
  结论:ConcurrentHashMap使用的锁分段技术。首先将数据分成一段一段地存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问。
  每天一点成长,欢迎指正!
  原文:https:www。cnblogs。combarrywxxp8678698。html

春节我最难忘作文700字春节是中国最隆重的节日,过了春节,就意味着新的一年开始了,就意味着我们又长了一岁,就意味着我们应该更懂事一些了。在春节这天,到处都是喜气洋洋的,人人嘴边都会挂着一丝微笑。……平台经济为何会被重提?最近促进平台经济发展又在政策层面被提了出来,前段时间整体在互联网领域的高压监管势头应该会做一定调整,希望互联网平台在促进整体经济活力上进一步发挥积极作用。这也证明了互联网平台已……读猎人笔记有感500字作文朝霞泛着柔和的红晕,不是像火一样烈焰喷射。太阳既不像酷热干旱时那样火红,也不暗淡如暴风雨前那样,而是清净明丽又宜人灿烂屠格涅夫这位大自然的描绘师在《猎人笔记》中留下许多美丽的俄……眼镜王蛇的优秀作文400字我每次去动物园,一定会去两栖动物爬行馆去观察眼镜王蛇。眼镜王蛇是陆地上的王者。就连大象这样的庞然大物都要远远避开它,其实它只吃蛇类,它可以轻易吞下七尺长的巨蛇。它攻击其它……Spring基础知识spring核心要点IOC(容器,控制反转):将对象的创建权交给SringDI(依赖注入):由spring控制对象的注入过程AOP(切面编程):为多个方法添加……新旧能源势力的造车路线之争新能源汽车正在逐渐成为汽车市场的主力军,这个趋势和渗透率都表明这样的观点,传统燃油车和新能源汽车并存的时期已经来临,虽然新能源的产销还是存在一定的低位,但是在不远的将来,新能源……关于合作的作文合作的意义没有永远的朋友,也没有永远的敌人,只有永远的利益但我不这么认为,利益固然是好,但是也要符合实际,我不要只顾眼前的利益而失去一些必然的东西。在我们的人生中,竞争无时不刻的围……以我喜欢的一个地方为题的小学生作文篇一:我喜欢的一个地方我喜欢北海公园,这里环境优雅,风景迷人。走进公园的大门,就可以看到这里绿柳成茵。向远望去,即能看见白塔高高耸立在青山上,再将视线向下拉,就是一……做水果拼盘做水果拼盘在上一次作文兴趣课上,顾老师就对我们说:ldquo;下一次作文课做水果拼盘,请你们带一些水果来。rdquo;哈哈!我成了操盘手!今天,我十分兴奋地等着老师过来上……日本研究人员开发锂空气电池能量密度达到500Whkg锂空气电池(LABs)是改进当前储能技术的众多途径之一。这种电池及其他金属空气电池因具有高能量密度潜力,受到研究人员青睐。然而,开发此类技术也存在一定挑战,如效率低和循环寿命短……支付宝高温补贴你们领了吗,感觉如何?大家好,我是阿明,很高兴能够回答这个问题。支付宝高温补贴你们领了吗?感觉如何?其实支付宝红包是从8月2号到8月15号,每天都可以领取,我基本上每天都领了,因为自己早……天才歌手2看完夏树给我的报名须知,妈妈立刻高兴地说道:太棒了,咱们就让你努力成为一名天才歌剧演员吧!这么说!真要让我去参加这次考试了?要知道演歌剧可没那么简单,需要演员又会唱歌又会表演。……
流浪地球在昨天,我和妈妈一起去看了一部很感人的电影,它的名字叫做《流浪地球》。我和妈妈在电影院里还碰到了同班同学,他们看得也是《流浪地球》,在我身边的叔叔阿姨们,也看这部电影《流浪地球……历年云南高考满分作文精选六月的雨,浇灭了夏天的狂燥,同学的你是否在为下一步为奋斗。小编收集了历年云南高考满分作文精选,欢迎阅读。五味的同学关系情谊,我们积淀后剩下的温存,生活的赐予,让高中生活有……给2008年运动员的一封信范文敬爱的运动员叔叔阿姨们:你们好。明天就是我们国家举办奥运会的日子了,你们准备的怎么样了?身体状况还好吧?有没有受伤的?或在练习中有其它意外的?如果有要赶……电表开发新思维智能电表与ampampquot仪器云ampam电表开发新思维:智能电表与仪器云融合技术的应用中国现代电网量测技术平台张春晖2017年5月25日1,采用仪器云高精度计算的智能电表远程在线检测系统开发应……能为?敢为!钻石的价值确实不菲,切割时一旦失手再晶莹也难免沦为废品,于是也就难倒了众多的切割师。老切割师固然有着超群卓越的技术,他能为,却少了小徒弟那份敢于操刀的勇气,不敢为;无技术,少经……再次绽放的花蕾(二)(接上次发的)ldquo;嗨,小音,你热吗?我去买个冰棍吧!rdquo;轩沫瑕热心道。ldquo;算了,我不热,你要吃就去买吧。rdquo;钟银音微笑道。ldquo;唔,那我也……1000字作文时间的声音冬有冬的来意,寒冷像花,花有花香,冬有回忆一把。面前是《好事情》的片段,小尤达的形象历历在目,心绪却已带着冬的回忆,循着雪花,飘回了过去。那日的天空也是雪一样的白,带着雪……2022年数字经济是未来经济发展的新风口何为数字经济?数字经济,作为经济学概念的数字经济是人类通过大数据(数字化的知识与信息)的识别选择过滤存储使用,引导、实现资源的快速优化配置与再生、实现经济高质量发展的经济……北京国际大数据交易所落户朝阳,享专项政策支持包新京报快讯(记者张璐)今天(2月11日),2022北京新闻中心举行北京全球数字经济标杆城市建设专场新闻发布会。朝阳区委常委、常务副区长崔小浩表示,朝阳区对北京国际大数据交易所的……世界因爱而美丽初中作文500字世界并不缺少爱,缺少的是发现爱的心灵。暑假的第二天,我从大士院乘5路公交车到围棋学校去,当车停靠在一个站台时,一位满头白发的老奶奶费了半天的工夫上了车,上车后老人并未入座……诺德基金阎安琪看好新能源汽车细分领域铝塑膜锂电池主要有三种封装方式:方形、圆柱、软包,其中软包电池有能量密度高、安全性能好等优势。软包电池关键的封装材料就是铝塑膜。铝塑膜市场此前由日韩企业把持,合计份额在70以上……20202025年中国智慧医疗行业前景预测与市场调查研究报告联系电话17748569729内容概括5G确定性网络是构建智慧医疗基础设施的关键,5G具备确定性的网络能力将支持数据低时延、无损、安全、稳定、实时的传输,配合网络切片与边……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网