当前位置: 首页 > news >正文 招远网站建设公司国外域名注册商排名 news 2025/10/22 4:01:19 招远网站建设公司,国外域名注册商排名,深圳网站美化,漳州城乡建设局网站首页【JUC】Java内存模型之JMM 文章目录【JUC】Java内存模型之JMM1. 概念2. JMM三大特性2.1 可见性2.2 原子性2.3 有序性3. 多线程对变量的读写过程4. 先行发生原则——happens-before4.1 happens-before八条规则4.1.1 次序规则4.1.2 锁定规则4.1.3 volatile变量规则4.1.4 传递规则…【JUC】Java内存模型之JMM 文章目录【JUC】Java内存模型之JMM1. 概念2. JMM三大特性2.1 可见性2.2 原子性2.3 有序性3. 多线程对变量的读写过程4. 先行发生原则——happens-before4.1 happens-before八条规则4.1.1 次序规则4.1.2 锁定规则4.1.3 volatile变量规则4.1.4 传递规则4.1.5 线程启动规则4.1.6 线程中断规则4.1.7 线程终止规则4.1.8 对象终结规则1. 概念 JMMJava内存模型 Java Memory Model 简称JMM。本身是一种抽象的概念并不真实存在它仅仅描述的是一组约定或规范通过这组规范定义了程序中(尤其是多线程)各个变量的读写访问方式并决定一个线程对共享变量的写入何时以及如何变成对另一个线程可见关键技术点都是围绕多线程的原子性、可见性和有序性展开的。 作用 通过JMM来实现线程和主内存之间的抽象关系。屏蔽各个硬件平台和操作系统的内存访问差异以实现让Java程序在各个平台下都能达到一致的内存访问效果。 2. JMM三大特性 可见性原子性有序性 2.1 可见性 可见性是指当一个线程修改了某一个共享变量的值其他线程是否能够立即知道该变更 JMM规定了所有的变量都存储在主内存中。 Java中普通的共享变量不保证可见性因为数据修改被写入内存的时机是不确定的多线程并发下很可能出现脏读所以每个线程都有自己的工作内存线程自己的工作内存中保存了该线程使用到的变量的主内存副本拷贝线程对变量的所有操作读取赋值等 都必需在线程自己的工作内存中进行而不能够直接读写主内存中的变量。不同线程之间也无法直接访问对方工作内存中的变量线程间变量值的传递均需要通过主内存来完成。 如果没有可见性保证的话会出现线程脏读 主内存中有变量x初始值为0线程A想要将x加1先将x0拷贝到自己的私有内存中然后更新x的值线程A将更新后的x值回刷到主内存的时间是不固定的刚好在线程A没有回刷x到主内存时线程B同样从主内存中读取x此时为0和线程A一样的操作最后期盼的x2就会变成x1 2.2 原子性 原子性指一个操作是不可中断的即多线程环境下操作不能被其他线程干扰。 线程修改共享变量的时候要保证原子性。 2.3 有序性 对于一个线程的执行代码而言我们总是习惯性认为代码的执行总是从上到下有序执行。但是为了提高性能编译器和处理器通常会对执行序列进行重排序。指令重排可以保证串行语义一致但没有义务保证多线程间的语义也一致即可能产生 脏读 简单说两行以上不相干的代码在执行的时候有可能先执行的不是第一条不见得是从上到下顺序执行执行顺序会被优化。 单线程环境里面确保程序最终执行结果和代码顺序执行的结果一致。 处理器在进行重排序时必须要考虑指令间的数据依赖性 多线程环境中线程交替执行由于编译器优化重排的存在两个线程中使用的变量能否保证一致性是无法确定的结果无法预测。 3. 多线程对变量的读写过程 JMM规范下多线程对变量的读写过程 由于JVM运行程序的实体是线程而每个线程创建时JVM都会为其创建一个工作内存(有些地方称为栈空间)工作内存是每个线程的私有数据区域而Java内存模型中规定所有变量都存储在主内存主内存是共享内存区域所有线程都可以访问但线程对变量的操作(读取赋值等)必须在工作内存中进行首先要将变量从主内存拷贝到的线程自己的工作内存空间然后对变量进行操作操作完成后再将变量写回主内存不能直接操作主内存中的变量各个线程中的工作内存中存储着主内存中的变量副本拷贝因此不同的线程间无法访问对方的工作内存线程间的通信(传值)必须通过主内存来完成其简要访问过程如下图: JMM定义了线程和主内存之间的抽象关系 线程之间的共享变量存储在主内存中(从硬件角度来说就是内存条)每个线程都有一个私有的本地工作内存本地工作内存中存储了该线程用来读/写共享变量的副本(从硬件角度来说就是CPU的缓存比如寄存器、L1、L2、L3缓存等) 4. 先行发生原则——happens-before 概述如果一个操作A happens-before 另一个操作B那么操作A对共享变量的修改将对操作B可见并且在程序执行中操作A将在操作B之前被执行。这个规则可以避免因为线程执行顺序不确定而导致的数据竞争和内存一致性问题。 注两个操作之间存在happens-before关系并不意味着一定要按照happens-before原则制定的顺序来执行。如果重排序之后的执行结果与按照happends-before关系来执行的结果一致那么这种重排序并不非法。 4.1 happens-before八条规则 4.1.1 次序规则 一个线程内按照代码顺序写在前面的操作先行发生于后面的操作。 简单来说就是前一个操作的结果可以被后续的操作获取前面一个操作把变量x的值赋为1那么后面一个操作肯定能知道x已经变成了1。 4.1.2 锁定规则 一个unLock操作先行发生于后面这里的“后面”指的是时间上的先后对同一个锁的lock操作。 4.1.3 volatile变量规则 对一个volatile变量的写操作先行发生于后面对这个变量的读操作前面的写对后面的读是可见的这里的“后面”同样是指时间上的先后。 4.1.4 传递规则 如果操作A先行发生与操作B而操作B又先行发生于操作C则可以得出操作A先行发生于操作C。 4.1.5 线程启动规则 Thread对象的start()方法先行发生于此线程的每一个动作。 4.1.6 线程中断规则 对线程interrupt()方法的调用先行发生于被中断线程的代码检测到中断事件的发生。 也就是说要先调用interrupt()方法设置中断标志位才能检测到中断发生。 4.1.7 线程终止规则 线程中所有操作都先行发生于对此线程的终止检测我们可以通过Thread::join()方法判断是否结束Thread::isAlive()的返回值等手段检测线程是否已经终止执行。 4.1.8 对象终结规则 一个对象的初始化完成构造函数执行结束先行发生于它的finalize()方法的开始简单来说就是对象没有完成初始化之前是不能调用finalized()方法的。 文章转载自: http://www.morning.hmqjj.cn.gov.cn.hmqjj.cn http://www.morning.bhbxd.cn.gov.cn.bhbxd.cn http://www.morning.rqmr.cn.gov.cn.rqmr.cn http://www.morning.glxmf.cn.gov.cn.glxmf.cn http://www.morning.ydryk.cn.gov.cn.ydryk.cn http://www.morning.ndmbz.cn.gov.cn.ndmbz.cn http://www.morning.bnylg.cn.gov.cn.bnylg.cn http://www.morning.jcwrb.cn.gov.cn.jcwrb.cn http://www.morning.dqrpz.cn.gov.cn.dqrpz.cn http://www.morning.xqffq.cn.gov.cn.xqffq.cn http://www.morning.htbgz.cn.gov.cn.htbgz.cn http://www.morning.qxlhj.cn.gov.cn.qxlhj.cn http://www.morning.mhpmw.cn.gov.cn.mhpmw.cn http://www.morning.bpmnl.cn.gov.cn.bpmnl.cn http://www.morning.fktlg.cn.gov.cn.fktlg.cn http://www.morning.czrcf.cn.gov.cn.czrcf.cn http://www.morning.qsy36.cn.gov.cn.qsy36.cn http://www.morning.qcslh.cn.gov.cn.qcslh.cn http://www.morning.wyjpt.cn.gov.cn.wyjpt.cn http://www.morning.rjjys.cn.gov.cn.rjjys.cn http://www.morning.lfgql.cn.gov.cn.lfgql.cn http://www.morning.zxznh.cn.gov.cn.zxznh.cn http://www.morning.dtlnz.cn.gov.cn.dtlnz.cn http://www.morning.qrlsy.cn.gov.cn.qrlsy.cn http://www.morning.jhrqn.cn.gov.cn.jhrqn.cn http://www.morning.pxbky.cn.gov.cn.pxbky.cn http://www.morning.bpmdz.cn.gov.cn.bpmdz.cn http://www.morning.nynpf.cn.gov.cn.nynpf.cn http://www.morning.nhlyl.cn.gov.cn.nhlyl.cn http://www.morning.qgfy.cn.gov.cn.qgfy.cn http://www.morning.xqkjp.cn.gov.cn.xqkjp.cn http://www.morning.nmrtb.cn.gov.cn.nmrtb.cn http://www.morning.qyqdz.cn.gov.cn.qyqdz.cn http://www.morning.mpngp.cn.gov.cn.mpngp.cn http://www.morning.ykswq.cn.gov.cn.ykswq.cn http://www.morning.xmttd.cn.gov.cn.xmttd.cn http://www.morning.qjtbt.cn.gov.cn.qjtbt.cn http://www.morning.hjjfp.cn.gov.cn.hjjfp.cn http://www.morning.zympx.cn.gov.cn.zympx.cn http://www.morning.rxhs.cn.gov.cn.rxhs.cn http://www.morning.cwgt.cn.gov.cn.cwgt.cn http://www.morning.dhbyj.cn.gov.cn.dhbyj.cn http://www.morning.lwrcg.cn.gov.cn.lwrcg.cn http://www.morning.jqcrf.cn.gov.cn.jqcrf.cn http://www.morning.mrpqg.cn.gov.cn.mrpqg.cn http://www.morning.rwcw.cn.gov.cn.rwcw.cn http://www.morning.ygwyt.cn.gov.cn.ygwyt.cn http://www.morning.rnqrl.cn.gov.cn.rnqrl.cn http://www.morning.skwwj.cn.gov.cn.skwwj.cn http://www.morning.wwklf.cn.gov.cn.wwklf.cn http://www.morning.tjwfk.cn.gov.cn.tjwfk.cn http://www.morning.knnc.cn.gov.cn.knnc.cn http://www.morning.xkwyk.cn.gov.cn.xkwyk.cn http://www.morning.gtjkh.cn.gov.cn.gtjkh.cn http://www.morning.gjlxn.cn.gov.cn.gjlxn.cn http://www.morning.hxbjt.cn.gov.cn.hxbjt.cn http://www.morning.lpnb.cn.gov.cn.lpnb.cn http://www.morning.bqmhm.cn.gov.cn.bqmhm.cn http://www.morning.zkqwk.cn.gov.cn.zkqwk.cn http://www.morning.bhjyh.cn.gov.cn.bhjyh.cn http://www.morning.tqwcm.cn.gov.cn.tqwcm.cn http://www.morning.thntp.cn.gov.cn.thntp.cn http://www.morning.bhqlj.cn.gov.cn.bhqlj.cn http://www.morning.wjtwn.cn.gov.cn.wjtwn.cn http://www.morning.yodajy.cn.gov.cn.yodajy.cn http://www.morning.dtgjt.cn.gov.cn.dtgjt.cn http://www.morning.kkqgf.cn.gov.cn.kkqgf.cn http://www.morning.lsgjf.cn.gov.cn.lsgjf.cn http://www.morning.lwnb.cn.gov.cn.lwnb.cn http://www.morning.wjlnz.cn.gov.cn.wjlnz.cn http://www.morning.dqcpm.cn.gov.cn.dqcpm.cn http://www.morning.smcfk.cn.gov.cn.smcfk.cn http://www.morning.ftmzy.cn.gov.cn.ftmzy.cn http://www.morning.wbysj.cn.gov.cn.wbysj.cn http://www.morning.ktmnq.cn.gov.cn.ktmnq.cn http://www.morning.ntdzjx.com.gov.cn.ntdzjx.com http://www.morning.xrwtk.cn.gov.cn.xrwtk.cn http://www.morning.wcqxj.cn.gov.cn.wcqxj.cn http://www.morning.wkwds.cn.gov.cn.wkwds.cn http://www.morning.lmqfq.cn.gov.cn.lmqfq.cn 查看全文 http://www.tj-hxxt.cn/news/238667.html 相关文章: 网站建设和优化要求网站建设的目标人群是什么 江苏网站建设价格郑州网络营销推广公司信息 常州网站建设流程传奇手游网站 成都网站设计排名的公司价格企业网站内容模块 网站分析seo情况做一个企业的网站怎么做的 天津做网站网页的公司品牌建设方案的完整纲要 哪个网站找住宿的便宜网页美工设计网站 网站建设后的注意问题韩国服装网站建设 天津小程序网站开发公司移动端高端网站开发 东莞大岭山天气常德网站建设优化 工信部资质查询网站交互式网站和非交互式网站 铜仁市网站建设情况西部网站域名出售 怎么做英文的网站wordpress 图片多 中国电信网站备案 锁定长沙城市建筑工程有限公司 南城网站建设公司品牌形象宣传策划方案 免费网站申请域名39939cn开发wordpress 需要学习 百度网站关键词微信网站开发登录 广安 网站建设百度视频seo 自己怎么做网站卖东西免费h5页面制作app 自己做淘宝返利网站吗网易企业邮箱手机登录 网站备案 个人组网方案优惠券推广网站怎么做 网站建设前期费用校园网站设计描述 太原seo网站管理宿迁怎样建设网站 论坛网站需要多大的空间中国最好的公关公司 网站开发实训要求wordpress聚合平台模板 怎样做网站底部导航如何提高网站的功能性建设 中国邮政做特产得网站郑州网站优化排名推广 兰州seo网站排名网站设计与建设第一章 网站 动态 标签页wordpress 文档中心 京东商城 网站建设wordpress文章生成分享图片插件