当前位置: 首页 > news >正文

网站营销站点有你想org域名网站

网站营销站点有你想,org域名网站,做旅行社网站,win7 做网站服务器JMM概述 Java Meory Model java内存模型。在不同的硬件和不同的操作系统上,对内存的访问方式是不一样的。这就造成了同一套java代码运行在不同的操作系统上会出问题。JMM就屏蔽掉硬件和操作系统的差异,增加java代码的可移植性。这是一方面。 另一方面JM…

JMM概述

Java Meory Model java内存模型。在不同的硬件和不同的操作系统上,对内存的访问方式是不一样的。这就造成了同一套java代码运行在不同的操作系统上会出问题。JMM就屏蔽掉硬件和操作系统的差异,增加java代码的可移植性。这是一方面。
另一方面JMM定义的一系列规则能够保证线程并发的安全性。主要是保证线程的可见性,有序性,原子性。
具体来说它主要就是抽象了线程和主存之间的关系。(如下图)每个线程都有一个工作内存(cpu缓存),工作内存中存放着主存(内存)的副本,一般是共享变量,比如实例变量,静态变量但是不包括局部变量。线程读写数据是直接操作工作内存的。线程不能访问其他线程的工作内存。多个线程间通信是通过主存来完成的。
在这里插入图片描述

线程三大问题

原子性,可见性,有序性。(简记:客源有)
线程需要满足这三大特性,才能保证线程并发安全。而JMM就是为了实现这三大特性定义的一系列规则。

可见性问题

可见性指的是当一个线程修改了共享变量后,另一个线程能够立马得到修改的这个值。但是由于CPU缓存的存在,可见性往往会存在一些问题。
比如说在多线程下,每个线程将变量存放在CPU缓存中,一个线程修改了变量后,放在CPU缓存中。另一个线程无法立即得到最新的值。这就造成了共享变量的数据不一致的问题。

原子性问题

CPU在执行指令的过程中发生了线程切换,会导致一些变量数据不一致,这种问题就成为原子性问题。

有序性问题

CPU在执行指令的时候,为了充分利用内部的计算单元,处理器可能会对代码进行乱序执行。CPU在并发环境下,乱序执行可能会到导致结果错误。这种问题就叫做有序性问题。

JMM解决线程可见性,原子性,有序性问题

定义Java内存模型并非是一件容易的事情。不能单纯的禁用CPU缓存和编译优化,这样会严重影响程序性能。JMM抽象了线程和主存之间的关系,定义了程序中变量的访问规则来解决上述问题。
从抽象的角度来看,JMM定义了线程和主存之间的抽象关系:线程之间的共享变量存放在主内存中,每个线程都有一个私有的工作内存,本地内存中存储了主存中共享变量的副本,线程对变量的操作都是在工作内存中进行的。(这里的工作内存是一个抽象的概念。包含了CPU缓存,寄存器以及编译器优化。主内存则指的是物理硬件的主内存。)
在这里插入图片描述

可见性保证

可见性指的是当一个线程修改了共享变量的值之后,其他线程能够立马得到这个修改

volatile能够保证可见性和有序性,volatile修饰的变量在本地内存中修改后会立即同步到主存中去,供其他线程访问到。
锁也能保证可见性,锁在释放和申请的时候都会更新缓存,从主存中获取最新的值。

原子性保证

通过Lock和UnLock来保证。java中是synchronized关键字。synchronized关键字对应的底层jvm指令是monitorenter和moniterexit

    public void test01(){synchronized (this){int i = 1;}}

有序性保证

java中提供了volatile和synchronized两个关键字来保证线程之间的有序性。volatile本身就包含了指令重排的语义。而 synchronized 则是由一个变量在同一时刻只允许一个线程对其进行 lock 操作这条规则来保证有序性的

JMM核心概念-happens-before

如果一个操作happens-before另一个操作,那么第一个操作的执行结果对后续的操作是可见的。
两个操作存在happens-before关系,并不意味着一定要按照happens-before原则指定的顺序来执行。可以对指令进行重排序,只要保证结果正确性即可。

参考:
从线程三大特性深入理解JMM(Java 内存模型)
happens-before是什么?JMM最最核心的概念,看完你就懂了

http://www.yayakq.cn/news/928497/

相关文章:

  • 厦门网站建站公司官网mini1cn下载迷你世界登录
  • 吉林市建设局网站网站搭建需要的公司
  • 哈尔滨自助模板建站南昌网站建设南昌
  • 域名注册网站系统网站空间选linux
  • 为什么有网网站打不开怎么回事啊北京微信公众号定制开发
  • zencart 网站迁移wordpress获取文章发布时间
  • 怎么自己做推广网站免费下载ppt模板的网站有哪些
  • 检测网站开发语言如何建立一个网站链接把文件信息存里
  • 网站播放大视频如何做公关咨询公司
  • 自己做网站可以用私有云吗科大讯飞哪些做教学资源的网站
  • 想做cpa 没有网站怎么做网站开发的交付文档
  • 企业网站seo怎么做中国各大网站开发语言
  • 微信开发网站制作做项目网站
  • 做的网站怎么让别人也能看到吗网站侧边 跟随 样式
  • 中学生做的网站有哪些方面手机网站建设文章
  • 网站负面信息网站建设 甲方欠款 如何处理
  • 像优酷平台网站是怎么做的北京网站外包公司推荐
  • 国家工商局网站官网旅游公司网站建设合同书
  • 品牌网站制作建设网页界面设计教程视频
  • 网站建设高手要学多久ppt精美模板
  • 专做外贸的网站岳阳市城市建设投资公司网站
  • 淘宝客导购网站怎么做网络营销案例2022
  • 蚌埠高端网站建设陕西省医院网站建设管理
  • 优仔电话手表网站手机制作最简单钓鱼网站
  • 做app的网站有哪些功能个人博客html模板
  • 广东融都建设有限公司 公司网站品牌营销和品牌推广的区别
  • 邳州网站开发长春做网站多少钱
  • 婚纱影楼网站模板vps网站助手
  • 伊犁北京网站建设青岛制作网站
  • 门户网站有哪几个西安建设工程交易信息网