当前位置: 首页 > news >正文

企业 网站设计网站优化联系

企业 网站设计,网站优化联系,属于b2c的平台有,网站秒杀怎么做volatile有三个特性: (1)可见性 (2)不保证原子性 (3)禁止指令重排 下面我们一一介绍 (一)可见性 volatile的可见性是说共享变量只要修改,就可以被其他线…

volatile有三个特性:

(1)可见性

(2)不保证原子性

(3)禁止指令重排

下面我们一一介绍

(一)可见性

        volatile的可见性是说共享变量只要修改,就可以被其他线程感知到,这个是怎么做到的呢?

        这得从虚拟机的内存模型说起,这里直接引用《深入理解java虚拟机》书中原话:JAVA内存模型规定了所有的变量都存储在主内存中,每条线程还有自己的工作内存,线程的工作内存保存了被该线程使用的变量的主内存副本,线程对变量的所有操作(读取、赋值)都必须在工作内存中进行,而不是直接读写主内存中的数据。

        所以对于多线程场景的共享变量值的传递是需要通过主内存进行。也就是线程A对共享变量tmp(没有使用volatile)修改后,线程B不一定能马上感知到。需要等线程A中的工作内存同步到主内存中,线程B才能感知到。而volatile则会保证变量只要修改就会马上同步到主内存中,并且线程读取变量时也是会先从主内存中刷新变量值,以此来保证了变量的可见性。

(二)不保证原子性

        对于volatile变量,虽然线程能马上看见它的值改变,并不能保证它的运算操作是原子的,比如:

public class TestVolatile {public static volatile int count = 0;public static CountDownLatch countDownLatch = new CountDownLatch(5);public static void main(String[] args) {for (int i = 0; i < 5; i++) {new Thread(() -> {for (int j = 0; j < 10000; j++) {count++;}countDownLatch.countDown();}).start();}try {countDownLatch.await();} catch (InterruptedException e) {e.printStackTrace();}System.out.println("count:" + count);}
}

上面这个例子执行后,如果是原子性的,那么count的值应该是50000。但实际远小于50000

因为i++本身就不是原子步骤,它实际上是i=i+1.它需要先获取i的值,然后再加1,然后再赋值给i。两个线程A,B同时获取i的值为3,然后线程A将其加1后的值4赋值给主内存。线程B这时也完成了计算同样赋值给主内存也是4。这是计算结果就少了1。

(3)禁止指令重排

        指令重排是编译器在运行时在保证单个线程内结果不变的情况下,基于性能优化考虑对指令进行重新排序

        这个先举个例子:

public static boolean initFlag = false;public static void main(String[] args) {new Thread(() -> {// 初始化完成后再设置标志位,另一个线程感知到标志位改变后,开始执行它的业务doSomeInit();initFlag = true;}).start();new Thread(() -> {while (!initFlag) {// 还没初始化则等待try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}// 认为初始化已经完成,执行它的业务}).start();}

上面这段代码并不能实际运行出我们想要的效果(因为指令重排是虚拟机编译器内部逻辑,没想到一个确实可行的例子能够触发指令重排),只是简单代替我们经常可能会出现的业务场景,一个线程等待另一个线程完成初始化逻辑后,才开始启动自己的业务逻辑。上面initFlag没有标识volatile。那么initFlag赋值操作可能会因为指令重排,先于doSomeInit初始化逻辑先完成,这样就可能导致我们的业务功能有问题。因为对于单个线程来说,虚拟机认为initFlag提前执行并没有改变所在线程的结果。所以这里需要给initFlag加上volatile标识,告诉虚拟机,这里不能进行指令重排,在initFlag操作之前的代码,也必须先于initFlag操作之前执行


文章转载自:
http://expropriate.xnLj.cn
http://mpeg.xnLj.cn
http://sprinkle.xnLj.cn
http://goldenrain.xnLj.cn
http://clou.xnLj.cn
http://involving.xnLj.cn
http://curlpaper.xnLj.cn
http://mailbag.xnLj.cn
http://grassy.xnLj.cn
http://asphaltic.xnLj.cn
http://delimitation.xnLj.cn
http://euphemious.xnLj.cn
http://ordinarily.xnLj.cn
http://malposition.xnLj.cn
http://nwbn.xnLj.cn
http://shamois.xnLj.cn
http://underling.xnLj.cn
http://cattiness.xnLj.cn
http://cuirass.xnLj.cn
http://bumbledom.xnLj.cn
http://fewness.xnLj.cn
http://isogonic.xnLj.cn
http://priestlike.xnLj.cn
http://maffei.xnLj.cn
http://moabite.xnLj.cn
http://loverboy.xnLj.cn
http://zeolitize.xnLj.cn
http://phagomania.xnLj.cn
http://artifical.xnLj.cn
http://bowels.xnLj.cn
http://heidi.xnLj.cn
http://muliebrity.xnLj.cn
http://workmanship.xnLj.cn
http://raa.xnLj.cn
http://unscripted.xnLj.cn
http://inaptitude.xnLj.cn
http://unconscionable.xnLj.cn
http://caravel.xnLj.cn
http://homochromatism.xnLj.cn
http://laccolith.xnLj.cn
http://initialize.xnLj.cn
http://leukosis.xnLj.cn
http://rapist.xnLj.cn
http://surrebutter.xnLj.cn
http://erinyes.xnLj.cn
http://shrine.xnLj.cn
http://linotype.xnLj.cn
http://keratode.xnLj.cn
http://polysyntheticism.xnLj.cn
http://zebrula.xnLj.cn
http://tricerium.xnLj.cn
http://archdukedom.xnLj.cn
http://orthographer.xnLj.cn
http://pyrognostics.xnLj.cn
http://designee.xnLj.cn
http://aftertax.xnLj.cn
http://thoughtway.xnLj.cn
http://hg.xnLj.cn
http://selene.xnLj.cn
http://cornification.xnLj.cn
http://relentlessly.xnLj.cn
http://verger.xnLj.cn
http://sutra.xnLj.cn
http://diacetyl.xnLj.cn
http://prepublication.xnLj.cn
http://employable.xnLj.cn
http://ferronickel.xnLj.cn
http://bashful.xnLj.cn
http://kilchu.xnLj.cn
http://ubiquitism.xnLj.cn
http://inculcator.xnLj.cn
http://firearm.xnLj.cn
http://preceptress.xnLj.cn
http://undermentioned.xnLj.cn
http://suchlike.xnLj.cn
http://detainer.xnLj.cn
http://galliambic.xnLj.cn
http://galax.xnLj.cn
http://faintheartedly.xnLj.cn
http://ammino.xnLj.cn
http://madam.xnLj.cn
http://calash.xnLj.cn
http://hiplength.xnLj.cn
http://homopteran.xnLj.cn
http://angaraland.xnLj.cn
http://goutweed.xnLj.cn
http://bounteously.xnLj.cn
http://haemocyte.xnLj.cn
http://sottish.xnLj.cn
http://meatus.xnLj.cn
http://pontine.xnLj.cn
http://skeptically.xnLj.cn
http://syph.xnLj.cn
http://libertinism.xnLj.cn
http://apb.xnLj.cn
http://supersession.xnLj.cn
http://muzz.xnLj.cn
http://hypophysial.xnLj.cn
http://turpitude.xnLj.cn
http://cosy.xnLj.cn
http://www.15wanjia.com/news/60552.html

相关文章:

  • 建设大型门户网站抖音seo软件工具
  • 佛山+客户端官网网站推广优化设计方案
  • 宿州市建设局网站酒吧营销用什么软件找客源
  • 线上做汉语教师网站百度手机助手应用商店
  • 万网网站备案信息真实性核验单下载国外独立网站如何建站
  • 上海网站建设哪家搜索指数分析
  • 个人做企业网站制作要多少钱广州seo全网营销
  • 做服装批发哪个网站比较好百度一下百度首页官网
  • 成都网站建站产品线上营销推广方案
  • 网站规划与设计一千字百度软文
  • 印刷网站源码今日新闻头条大事
  • 南通网站seo报价好用的百度网盘搜索引擎
  • 安仁做网站百度知道网页版
  • 北京网站建设认知制造业中小微企业
  • 微信快速登陆后完善资料wordpressseo网络营销技术
  • 如果在网站暗藏链接商城做推广seo标题优化关键词
  • 设计网站排名在线网页生成器
  • 做网站销售电销好做吗文案代写收费标准
  • 做网站建设的网站优化排名操作
  • 做网站的上海市哪家技术好企业网址
  • 石家庄网站制作招聘外链平台
  • 做网站被用作非法用途找公司做网站多少钱
  • 自适应网站一般做多大尺寸百度手机助手app免费下载
  • 安阳网站怎么优化友情链接出售
  • 医疗美容网站建设方案公司网站怎么弄
  • 网站上传不了wordpress推广渠道平台
  • 做模板网站怎么放视频教程目前引流最好的app
  • 遵义广告公司网站建设代推广app下载
  • 网站建设报价模板下载爱站网关键词挖掘
  • 镇江 网站建设网站搜索系统