全球今热点:并发编程:volatile关键字,你学会了吗?
时间:2023-06-26 21:51:38来源:今日头条
一、64位写入的原子性(Half Write)

如,对于一个long型变量的赋值和取值操作而言,在多线程场景下,线程A调用set(100),线程B调 用get(),在某些场景下,返回值可能不是100。


(资料图)

因为JVM的规范并没有要求64位的long或者double的写入是原子的。在32位的机器上,一个64位变 量的写入可能被拆分成两个32位的写操作来执行。这样一来,读取的线程就可能读到“一半的值”。解决 办法也很简单,在long前面加上volatile关键字。

二、重排序:DCL问题

单例模式的线程安全的写法不止一种,常用写法为DCL(Double Checking Locking),如下所示:

上述的 instance = new Singleton(); 代码有问题:其底层会分为三个操作:

1. 分配一块内存。

2. 在内存上初始化成员变量。

3. 把instance引用指向内存。

在这三个操作中,操作2和操作3可能重排序,即先把instance指向内存,再初始化成员变量,因为 二者并没有先后的依赖关系。此时,另外一个线程可能拿到一个未完全初始化的对象。这时,直接访问 里面的成员变量,就可能出错。这就是典型的“构造方法溢出”问题。 解决办法也很简单,就是为instance变量加上volatile修饰。

volatile的三重功效:64位写入的原子性、内存可见性和禁止重排序。

三、volatile实现原理

由于不同的CPU架构的缓存体系不一样,重排序的策略不一样,所提供的内存屏障指令也就有差 异。 这里只探讨为了实现volatile关键字的语义的一种参考做法:

1. 在volatile写操作的前面插入一个StoreStore屏障。保证volatile写操作不会和之前的写操作重 排序。

2. 在volatile写操作的后面插入一个StoreLoad屏障。保证volatile写操作不会和之后的读操作重 排序。

3. 在volatile读操作的后面插入一个LoadLoad屏障+LoadStore屏障。保证volatile读操作不会和 之后的读操作、写操作重排序。

具体到x86平台上,其实不会有LoadLoad、LoadStore和StoreStore重排序,只有StoreLoad一种 重排序(内存屏障),也就是只需要在volatile写操作后面加上StoreLoad屏障。

四、JSR-133对volatile语义的增强

在JSR -133之前的旧内存模型中,一个64位long/ double型变量的读/ 写操作可以被拆分为两个32位 的读/写操作来执行。从JSR -133内存模型开始 (即从JDK5开始),仅仅只允许把一个64位long/ double 型变量的写操作拆分为两个32位的写操作来执行,任意的读操作在JSR -133中都必须具有原子性(即 任 意读操作必须要在单个读事务中执行)。

标签:

  • 上一篇文章: 国际禁毒日|愿世界无毒品
  • 下一篇文章: 最后一页
  • 最新
  • 全球今热点:并发编程:volatile关键字,你学会了吗?

    一、64位写入的原子性(HalfWrite)如,对于一个long型变量的赋值和取

  • 国际禁毒日|愿世界无毒品

    罂粟能盛放花朵,却结不出善良的果实。毒品能激发幻觉,却带不来幸福的

  • 全球快消息!安靠智电:副总经理王建平、王春梅拟减持股份

    证券时报e公司讯,安靠智电(300617)6月26日晚间公告,公司副总经理王建

  • 民航暑运客流将持续上升 航司在郑积极投放运力

    民航端午假期运输数据,印证了文旅市场的持续火热。根据飞常准大数据统

  • 市市场监管局召开广告业发展调研座谈会

    为加快推进广告产业发展,进一步发挥现代服务业的重要作用。近期,仙桃

  • 7月实施!海南统一使用仅销售预包装食品备案系统

    新海南客户端、南海网记者蒙健近日,记者从海南省市场监督管理局获悉,

  • Todd Howard告诉你《星空》一千个星球上有什么|环球观察

    Bethesda之前在发布会上透露了《星空》的一个要素,游戏中的星球数量超

  • 天天简讯:手机花屏能自己恢复吗_手机花屏

    1、如何解决花屏的问题关闭手机,折下电池,过会再安装上电池,重新开

  • 初级经济师《金融》每日一练(2023.06.25)

    初级经济师《金融》每日一练(2023 06 25),由经济师考试频道提供,查找

  • 百丽集团携多品牌正式入驻得物App 当前热闻

    6月25日消息,百丽集团携手旗下多品牌,正式入驻得物App,百丽集团

  • 当前观点:端午节,景区兴起汉服热

    端午节假期,我市各景区积极倡导文明旅游。在商丘古城旅游景区、宋小庙

  • 全球关注:维京主场3-1力克布兰 足彩任九开183注58030元

    维京3-1布兰北京时间6月25日,胜负彩第23080期任九开奖结果揭晓。本期

  • 环球视讯!电脑关不了机是怎么回事?如何解决电脑关不了机的问题?

    电脑关不了机是怎么回事?1、电脑不能关机的时候,如果是使用强制关

  • 制香囊、挂菖蒲、祈平安!金山这里氛围浓 世界观点

    每年农历五月初五端午节之后,蛇虫毒物活动频繁,特别是南方地区,梅雨

  • 单位更换公章介绍信 看点

    单位更换公章介绍信(通用3篇)单位更换公章介绍信篇1介绍信北京市公安

  • 莘县开展“粽享和谐邻里情”活动

    6月22日下午,残奥会冠军贾红光和红光服务队志愿者来到莘县燕塔街道尚

  • 旅游
    • 三星Galaxy Watch 6智能手表参数曝光,搭载Exynos W930处理器

    • 世界关注:大厂举办“全民数字素养与技能提升月”专场招聘会

    • 李大为去世前 李大为追悼会在京举行|环球即时

    • 微资讯!Angelababy:一切的一切正在发生-环球今日讯