如,对于一个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中都必须具有原子性(即 任 意读操作必须要在单个读事务中执行)。
2023年6月26日上午,6月份广州市中小客车增量指标摇号活动顺利完成。
来为大家解答以下的问题,arrywith和marryto,ldquomarryrdquo与ldquomar
为确保加油站经营安全,防范安全事故发生,近日,许昌市东城区安委办组
南方网讯(记者 朱江伟通讯员 粤体宣)由阳春市人民政府主办、阳春市文
东风集团股份6月26日在港交所公告,东风本田截至今年3月31日合并会计年
中国体坛又有好消息了!在美国新泽西进行的高尔夫大满贯赛事当中,年仅
金融科技受盘面影响,金融科技TF跌5%。金融科技TF跟踪中证金融科技主题
今天小米手机官方预热了小米13Ultra手机的「新搭档」,具体内容将于明
1、我就觉得大黄蜂沪牌拍牌软件可以,上月25万人抢1万张牌照,也就是10
1、目前狼人杀只有雷电安卓模拟器2 0的内测版本才可以玩,其他模拟器都
欧洲基准天然气期货价格涨8 4%
春天的赞歌朗诵小学生,春天的赞歌这个很多人还不知道,现在让我们一起
陕西省西安市蓝田县是著名的“厨师之乡”。蓝田厨师久负盛名、规模...
你需要的东西原创艺术品配备 Photoshop 或 Fireworks 软件程序
在美国市场,三文鱼产品的市场规模越来越大,与牛肉、鸡肉、猪肉等主要
自从封控解除后,各大歌手都开始了巡演模式,纷纷复出捞金,就连60岁的
以下是福斯特在北京时间6月26日13:08分盘口异动快照:6月26日,福斯特
1、大雪压青松,青松挺且直。在困难的面前,我们人人都要做一棵青松,
6月26日,南方沪深300ETF最新单位净值为1 8889元,累计净值为1 656元,
港股医药外包概念股集体上涨,昭衍新药(603127)涨超10%,泰格医药(3
来为大家解答以上的问题。正是江南好风景落花时节又逢君的意思,正是江
格隆汇6月26日丨三特索道(002159 SZ)公布,全资子公司武汉三特木兰川旅
人民日报记者屈信明葛孟超二十届中央财经委员会第一次会议强调,要实施
1、12306早上5点可以买票的。2、晚上1点至第二天早上5点之间(周二为23
《证券日报》记者从广期所处获悉,12月23日,工业硅期权迎来首个交易日
【超图软件:预计上半年净利润4250万元–5750万元同比扭亏为盈】超图软
作为2023年备受期待的大型电视剧,《隐擎》已于6月中旬在中国的海南岛
是重振旗鼓,还是日渐式微,阿里正在酝酿一场风暴。作者|桑明强就当人
6月26日重庆第二师范学院重庆第二师范学院毕业典礼拨穗仪式上,校长万
九龙福铂金多少钱一克(2023年06月26日)每日更新