JMM导读_jmm是什么意思

JMM导读_jmm是什么意思JMM优秀文章导读。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一. volatile

理解volatile特性的一个好方法是:把对volatile变量的单个读/写,看成是使用同一个锁对这些单个读/写操作做了同步。

前文提到过,x86处理器仅会对写-读操作做重排序。X86不会对读-读,读-写和写-写操作做重排序,因此在x86处理器中会省略掉这三种操作类型对应的内存屏障。在x86中,JMM仅需在volatile写后面插入一个StoreLoad屏障即可正确实现volatile写-读的内存语义。这意味着在x86处理器中,volatile写的开销比volatile读的开销会大很多(因为执行StoreLoad屏障开销会比较大)。

二. 锁

当线程释放锁时,JMM会把该线程对应的本地内存中的共享变量刷新到主内存中;当线程获取锁时,JMM会把该线程对应的本地内存置为无效。从而使得被监视器保护的临界区代码必须要从主内存中去读取共享变量。

对比锁释放-获取的内存语义与volatile写-读的内存语义,可以看出:锁释放与volatile写有相同的内存语义;锁获取与volatile读有相同的内存语义。

下面对锁释放和锁获取的内存语义做个总结:

  •  线程A释放一个锁,实质上是线程A向接下来将要获取这个锁的某个线程发出了(线程A对共享变量所做修改的)消息。
  • 线程B获取一个锁,实质上是线程B接收了之前某个线程发出的(在释放这个锁之前对共享变量所做修改的)消息。
  • 线程A释放锁,随后线程B获取这个锁,这个过程实质上是线程A通过主内存向线程B发送消息。

二. JMM

  1. 深入理解java内存模型(一)——基础
  2. 深入理解java内存模型(二)——重排序
  3. 深入理解java内存模型(三)——顺序一致性
  4. 深入理解java内存模型(四)——volatile
  5. 深入理解java内存模型(五)——锁
  6. 深入理解java内存模型(六)——final
  7. 深入理解java内存模型(七)——总结

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/197094.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • HTML+CSS实现导航条及下拉菜单[通俗易懂]

    HTML+CSS实现导航条及下拉菜单[通俗易懂]html+css实现下拉菜单

    2022年5月18日
  • python层次聚类分析_SPSS聚类分析:系统聚类分析[通俗易懂]

    python层次聚类分析_SPSS聚类分析:系统聚类分析[通俗易懂]一、概念:(分析-分类-系统聚类)系统聚类法常称为层次聚类法、分层聚类法,也是聚类分析中使用广泛的一种方法。它有两种类型,一是对研究对象本身进行分类,称为Q型聚类;另一是对研究对象的观察指标进行分类,称为R型聚类。同时根据聚类过程不同,又分为分解法和凝聚法。二、聚类方法(分析-分类-系统聚类-方法)1、聚类方法。可用的选项有组间联接、组内联接、最近邻元素、最远邻元素、质心聚类法、中位数聚类法和Wa…

    2022年10月17日
  • 期货真的可以做到长期稳定盈利吗?[通俗易懂]

    期货真的可以做到长期稳定盈利吗?[通俗易懂]我主要做外汇,期货和期权,A股也做,但是中国的股票你们知道的,做空的限制太多,融券融不到,股指期货还限制开仓和提高杠杆率。所以要等一个轮回需要5年以上,所以股票等待建仓机会比较漫长。从交易者的层面来看,我一般把他们分为这么几类人:一,幼儿园阶段:无知者无畏这种人没做过交易,只是从朋友那里听说,交易能赚大钱,或者是书刊杂志上读了一些交易大师的成功学传记,然后就跟打了鸡血似的,觉得自己也能和他们一样在金融市场赚到很多钱,这些人没有风控意识,甚至感觉这个市场只会赚钱,不会亏钱。于是他们就开户,然后一头

    2022年10月5日
  • 关于色带管理_色带怎么安装

    关于色带管理_色带怎么安装转载自https://tieba.baidu.com/p/1929685584?red_tag=3141090095Banding看上去像是颜色分层、条状带。产生的原因是因为颜色数据的丢失。母带(RGB10bit)→DVDISO/BDMV(YUV4:2:08bit)就会产生很严重的banding,不过后期公司也有应对banding的方法。banding一般出现在:较暗的场景、颜…

    2022年10月13日
  • embedded dylibs/frameworks are only supported on iOS 8.0 and later 错误解决[通俗易懂]

    embedded dylibs/frameworks are only supported on iOS 8.0 and later 错误解决

    2022年1月19日
  • OHEM算法

    OHEM算法版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/u014380165/article/details/73148073…

    2022年5月7日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号