临汾山东漯河饰品美体美文
投稿投诉
美文创意
爱情通信
用品婚姻
爱好看病
美体软件
影音星座
瑜伽周边
星座办公
饰品塑形
搞笑减肥
幼儿两性
智家潮品
漯河衢州
兴义眉山
桂林阳泉
玉溪简阳
山东遂宁
永城新余
梧州洛阳
泸州温州
临汾清远
营口常熟
浙江大连
桐乡宜昌

彻底理解volatile

7月23日 封了心投稿
  volatile原理
  在Java并发编程中synchronized和volatile扮演者重要的角色,volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的可见性和程序执行的有序性。如果volatile使用恰当的话,它比synchronized的使用和执行成本更低,因为它不会引起线程上下文切换和调度。我们了解一下计算机,例如在我们工作当中大多数都是多核,由于CPU和物理主存速度不一致问题,为了解决CPU读取内存指令和数据效率问题,诞生了CPU高速缓存。
  privatevolatileinstancenewSingleton();
  在生成汇编代码时会在volatile修饰的共享变量进行写操作的时候会多出Lock前缀的指令,Lock前缀指令在多核处理器下会发生两件事。将当前处理器缓存行的数据写回系统内存;这个写回内存的操作会使得其他CPU里缓存了该内存地址的数据无效
  为了提高处理器速度,首先处理器不直接和内存进行通信,而是先将系统内存的数据读到高速缓存(L1,L2,L3)后再进行操作,但是操作何时会写到内存,如果对声明volatile的变量进行写操作,JVM就会向处理器发送一条Lock前缀的指令,将这个变量所在缓存行的数据写到系统内存。但是就算写到内存,如果其他处理器存在的值还是旧的,再执行计算操作就会有问题。所以,在多处理器下,为了保证各处理器的缓存是一致的,就会实现缓存一致性协议,每个处理器通过嗅探在总线上传播的数据来检查自己缓存的值是不是过期了,当处理器发现自己缓存行对应的内存地址别修改,就会将当前处理器的缓存行设置为无效状态,当处理器对这个数据进行修改操作的时候,会重新从系统内存中把数据读到处理器缓存里。因此,我们得出一下结论:Lock前缀的指令会引起处理器缓存写回内存;一个处理器的缓存回写到内存会导致其他处理器的缓存失效;当处理器发现本地缓存失效后,就会从内存中重读该变量数据,即可以获取当前最新值。
  这样针对volatile变量通过这样的机制就使得每个线程都能获得该变量的最新值,即可见性。可见性
  那么下面我们通过代码证明volatile如何保证可见性?保证不同线程对这个变量进行操作时的可见性,即变量一旦改变所有线程立即可以看到保证可见性publicclassResourceData{voliate关键字能保证变量的可见性,多个线程修改同一个变量时,一个线程修改完,另一个线程获取到的是修改之后的值。privatevolatileintnumber0;publicvoidadd(){this。number10;}publicstaticvoidmain(String〔〕args){ResourceDataresourceDatanewResourceData();newThread((){System。out。println(Thread。currentThread()。getName()comein);try{TimeUnit。SECONDS。sleep(3);resourceData。add();System。out。println(Thread。currentThread()。getName()updatenumbervalueresourceData。number);}catch(InterruptedExceptione){e。printStackTrace();}},AA)。start();第二个线程是mainwhile(resourceData。number0){}System。out。println(Thread。currentThread()。getName()missionisover,maingetnumbervalue:resourceData。number);}}AAcomeinAAupdatenumbervalue10
  如果共享变量不加volatile,没有可见性,程序无法停止,加了volatile保证可见性,程序可以停止。
  原理解释:没有添加volatile关键字,线程A对共享变量改变了以后将number修改为10,主线程(线程B)访问number的值还是0,这就是不可见。添加volatile之后,线程A对共享数据进行了改变以后,那么main线程再次访问,number的值就是改变之后的number10原子性
  不保证原子性,代码实现:不保证原子性publicclassResourceData2{volatile关键字不能保证变量的原子性,当多个线程修改一个变量的时候可能回出现写丢失的情况。如何保证数据的原子性呢privatevolatileintnumber0;AtomicInteger包装类可以保证变量的原子性AtomicIntegeratomicIntegernewAtomicInteger();publicvoidaddAtomic(){atomicInteger。getAndIncrement();}publicvoidadd(){}publicstaticvoidmain(String〔〕args){ResourceData2resourceDatanewResourceData2();for(inti0;i20;i){newThread((){for(intj0;j1000;j){resourceData。add();resourceData。addAtomic();}},String。valueOf(i))。start();}等待上面的线程全部计算完,再通过main线程获取最终的结果while(Thread。activeCount()2){指main和GcThread。yield();}System。out。println(Thread。currentThread()。getName()finallynumbervalue:resourceData。numberfinallyatomicIntegervalue:resourceData。atomicInteger);}}mainfinallynumbervalue:19778finallyatomicIntegervalue:20000
  预期结果是:20000,但是实际结果是:19778,那么是什么原因导致的呢?首先对于一读一写操作,不会有数据问题,因为假设主内存的共享变量number1,需要对主内存的number处理,对于两个线程T1、T2如果是一读一写的操作是不会有数据丢失的情况,某一时刻,t1抢到CPU的执行权,将共享数据读回T1的工作内存,进行number的操作,这个时候number2,将2从工作内存写回到主内存中。写回后马上通知T2线程,将number2读到T2的工作线程,所以不会造成数据丢失问题。对于两个写,会出现数据问题,假设主内存的共享变量number0,需要对主内存进行10次的number处理,最终的结果就是10,对于两个线程T1、T2如果是两个写的操作会造成数据丢失的情况,T1和T2将主内存的共享数据读取到各自的工作内存去,某一时刻,T1线程抢到CPU的执行权,进行number的处理,将工作内存中的number1写回到主内存中,就在这一刻,T2也抢到CPU执行权,进行number的处理,这个时候number后的结果也等于1,T1将number1写回到主内存中去,并通知T2线程,将主内存中的number1读到T2的工作内存中去,这个时候对于T2,它之前也进行了一次number的操作将会无效,回重新进行一次number的操作。这也数据也就写丢了一次,那么10次number后的结果也就不会等于10。禁止指令重排
  重排序是指编译器和处理器为了优化程序性能而对指令序列进行重新排序的一种手段,有时候会改变程序语句的先后顺序(不存在数据依赖关系,可以重排序;存在数据依赖关系,禁止重排序)重排序的分类和执行流程编译器优化的重排序:编译器在不改变单线程串行语义的前提下,可以重新调整指令的执行顺序指令级并行的重排序:处理器使用指令级并行技术来将多条指令重叠执行,若不存在数据依赖性,处理器可以改变语句对应机器指令的执行顺序内存系统的重排序:由于处理器使用缓存和读写缓冲区,这使得加载和存储操作看上去可能是乱序执行
  数据依赖性:若两个操作访问同一变量,且这两个操作中有一个为写操作,此时两操作间就存在数据依赖性(存在数据依赖关系,会禁止重排序,因为会导致程序运行结果不同),如果不存在依赖关系,可以重新排序。
  如果本文对你有帮助的话,欢迎点赞,非常感谢,欢迎关注公众号:阿福聊编程

每日早安暖心话撩人早安情话最暖心短句下面这些是小编给大家整理的每日早安暖心话,撩人早安情话最暖心短句,把埋怨的话放一放,把负能量收一收太阳喜欢向日葵,人们也会喜欢上爱笑的你习惯好的自己,一切都会好的早安!,喜欢就……一则假消息令腾讯2362亿市值蒸发,再令中信传媒首席躺枪,是财联社(深圳记者,成孟琦)讯,谣言没事溜一圈,锻炼下股民的心理承受力。2月21日盘中又上演,雪球一用户高喊腾讯将被重锤,遭广泛转发讨论,市场情绪波动随之而来,腾讯股价应声……彻底理解volatilevolatile原理在Java并发编程中synchronized和volatile扮演者重要的角色,volatile是轻量级的synchronized,它在多处理器开发中……为何勇士将重返总决?美媒列5大理由!3大奇兵获认可,普尔排第尽管季后赛处于初期阶段,但时隔3年重返季后赛的勇士却让人印象深刻,他们场均轰下124。5分,领跑所有季后赛球队,并且场均送出30次助攻。更为恐怖的是,这支进攻如水银泻地般……Java四大引用详解强引用软引用弱引用虚引用面试官考察Java引用会问到强引用、弱引用、软引用、虚引用,具体有什么区别?本篇单独来详解mikechenJava引用从JDK1。2版本开始,对象的引用被划分为4种级别,……月升沧海同是才貌俱佳,文帝为何对越妃疼爱有加,却对宣后无感《月升沧海》凌不疑出征寿春的时候,在众多将士面前送给了程少商自己的私印。文帝与越妃、宣皇后三人在高台上注视着这一幕。文帝称大庭广众之下成何体统,怎么就那么的难舍难分……郑恺一家首次公开亮相!郑恺单手抱娃太霸气,苗苗穿卫衣变潮人郑恺自从结婚生子后,就备受大家的关注,不久前,一家三口在新年后首次公开亮相走机场,郑恺抱着女儿身穿潮味造型,整个人看上去多了不少的时尚帅气感,而妻子苗苗身穿运动装,整个人的纤细……CBA最新消息!翼龙官宣刘传兴加盟,新疆续约大外,郑准正式退CBA目前正处在休赛期当中,不过休赛期也有许多转会和续约的传闻,那么今天我们一同来关注一下CBA方面传来的最新的三条消息。首先第1条消息就是关于刘传兴的。在今天香港湾区翼……糖醋汁怎样调?牢记黄金比例54321,按照这个配方,一次成功临近年底,是时候准备一桌丰盛的年夜饭了,不少人已经开始行动,计划起了年夜饭菜单,鸡鸭鱼肉,红烧、糖醋、黄焖、油炸、凉拌,多种烹饪手法,搭配了不同口味的菜肴,在众多的菜系中,孩子……广东宏远下狠心!决定放弃马尚第三外援人选浮出水面广东宏远好不容易在第二阶段尾声阶段找到了状态,结果却惨败给了上海男篮,更糟糕的是两名外援威姆斯和莱多关键时刻都不是非常给力。当然,很多球迷都期待马尚可以在第三阶段或者季后赛回归……反物质是往上还是往下坠落?CERN实验对此展开研究来自欧洲核子研究中心(CERN)的物理学家发现,反物质会坠落。这听起来是一件显而易见的事情,但科学家们尚未能够确认它对重力的反应是否跟普通物质完全相同。现在,一个新的实验提供了……郭艾伦赵继伟高诗岩到底能不能在杨鸣的团队篮球理念下共融大概率是郭艾伦的转会会无疾而终还会回到辽宁打球,高诗岩已经拒绝了山东队,重返母队征战下赛季,赵继伟妥妥的不会走,拉练受伤牵挂着辽宁球迷的心!拥有全联盟最出色的后卫群,是幸……
治愈心情烦躁的心灵鸡汤,发朋友圈太合适了一、人生的确如此,有的人不打一声招呼就闯进了你的世界,也总有人没有一句道别就离开了你的生活。措手不及但也无可奈何。而你唯一能做的,就是好好珍惜眼前人。二、生命中有许多你不……对话前国乒杀神陈玘借调回归国家队备战世乒赛,力所能及帮队伍减2022年第56届世乒赛团体赛将于9月30日到10月9日在成都举行,中国男队冲击十连冠,中国女队力争五连冠。近日,雅典奥运会乒乓球男双冠军和两届世乒赛男双冠军、目前担任江苏省乒……南京旅游攻略南京,简称宁,古称金陵、建康,省会南京。南京是中国著名的六朝古都,拥有丰富的历史文化和独特的自然景观。它是六朝都会、文化重镇、国际大都市和旅游胜地。在过去数千年里,南京是中国重……小贝的67岁神秘亲家母生8个孩子身材不输贝嫂,戴天价鸽子蛋幸福的家庭都是相似的,不幸的家庭各有各的不幸托尔斯泰有人住高楼,有人处深渊;有人蜜罐泡,有人汗中浸,生而为人,就是有这么多的不同,有的人命运就是康庄大道,顺利无比;也有人……慢性肾衰竭,生活饮食需要注意5点对于慢性肾衰竭一词,想必肾友们一定不陌生,很多肾友都很害怕慢性肾衰竭发展成尿毒症,近几年来深深困扰着大家,对此,我们能做的就是严格遵医嘱,注意自己的日常生活和饮食习惯,共同去控……2022年全球手机市场三星24!苹果15!小米12!华为去哪27日,据市场研究机构CounterpointResearch最新报告显示:三星电子在世界智能手机市场的单月占有率为24。自2月以来,三星已连续三个月领跑智能机领域。排名第二的……2022年度真香小主机丨零刻GTR6为何能够异军突起?2022年12月11日,小米突然发布首款桌面迷你主机,重新把迷你主机带入大众视野。迷你主机作为一个冷门领域,受众一直是有些许携带需求且对桌面美学有自己独特理解的玩家,该领域蛋糕……19岁的陈婷,为什么愿意跟着49岁的张艺谋,还为他生了3个孩一段长久维持的婚姻必然存在牺牲和忍让,这是夫妻双方出于对彼此的爱而慎重做出的选择,是夫妻双方为了经营好这个小家庭不得不做出的让步,没有失就没有得。刘晓静婚姻不是儿戏,不会……小米12Pro天玑版大跳水1000元,相比于便宜200的一加目前双十一,小米12Pro天玑9000版本的价格12256GB降到了3199元,比一加AcePro的价格贵了200元,但综合硬件素质确实更强一些:1、天玑9000plus芯片算……诺基亚N93重制版被曝,骁龙8Gen1蔡司影像,能否力挽狂澜不知道有多少用户还记得诺基亚,当年的诺基亚与如今的三星、华为、苹果一样,堪称手机界的王者,几乎覆盖了整个手机市场。经典的设计,经典铃声,经典的开机动画,不少用户到现在也记忆犹新……iPhone15系列手机开启早期爆料,或全系灵动岛设计iPhone14ProProMax的市场火热,而两款标准版机型则市场遇冷形成了鲜明对比。同时iPhone15系列手机的早期爆料也开始增多。近日有外媒博主带来了iPhone15四……中国和柬埔寨中柬联合公报来了,中老柬铁路还远吗?刚刚,中国和柬埔寨两国的《联合公报》来了。《联合公报》提出,加快推进中柬命运共同体建设。笔者认为,这次《中柬联合公报》的最大亮点,是一线一点一拉。一线是加强澜……
友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找