栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java内存模型中的先发生规则

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java内存模型中的先发生规则

根据JMM:

在启动线程中的任何操作之前,都会在线程上调用start()。

如果x和y是同一线程的动作,并且x按程序顺序位于y之前,则hb(x,y)。

程序顺序的定义是这样的:

在每个线程t执行的所有线程间操作中,t的程序顺序是总顺序,该顺序反映了根据t的线程内语义执行这些操作的顺序。

线程间语义是JMM中定义明确的概念。这意味着每个线程在程序中执行的指令顺序必须保持不变,因为它是写在程序文本中的。

将所有这些应用于您的案例:

t.start();
hb
x = y + 1;
//程序顺序

t.start();
hb
y = x;

//发生在此处指定的规则之前

如果没有额外的同步,我们不能说如何

x = y + 1;
y = x;
涉及彼此(从JMM的角度来看)。

如果您要回答问题“在我的情况下在运行时会发生什么?”。可以发生很多事情......看看这个asnwer。运行时可以执行JMM认为很重要的优化。

无论如何,如果您对内部结构感兴趣,可以查看这篇
文章

(可以避免内存障碍)。如您所见,在生成的程序集中,执行易失性读取时未应用任何内存屏障。我的意思是运行时间无论如何都可以优化…只要保留JMM规则…



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/570815.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号