voliate关键字[通俗易懂]

voliate关键字[通俗易懂]1.voliate简介在上一篇文章中我们深入理解了java关键字synchronized,我们知道在java中还有一大神器就是关键volatile,可以说是和synchronized各领风骚,其中奥妙,我们来共同探讨下.通过上一篇的文章我们了解到synchronized是阻塞同步的,在线程竞争激烈的情况下会升级为重量级锁。而voliate就可以说是java虚拟机提供的最轻量级的同步锁。但它同时…

大家好,又见面了,我是你们的朋友全栈君。

1.voliate简介
在上一篇文章中我们深入理解了java关键字synchronized,我们知道在java中还有一大神器就是关键volatile,可以说是和synchronized各领风骚,其中奥妙,我们来共同探讨下.

通过上一篇的文章我们了解到synchronized是阻塞同步的,在线程竞争激烈的情况下会升级为重量级锁。而voliate就可以说是java虚拟机提供的最轻量级的同步锁。但它同时不容易被正确理解,也至于在并发编程中有很多程序员遇到线程安全的问题就会使用sychronized。Java内存模型告诉我们,各个线程会将共享变量从主内存拷贝到工作内存,然后执行引擎会基于工作内容中的数据进行操作处理。线程在工作内存进行操作后何时会写到主内存中?这个时机对于普通变量是没有规定的,而针对voliate修饰的变量给java虚拟机特殊的约定,线程对voliate变量的修改会立即被其他线程感知,既不会出现数据的可见性。

2.voliate实现原理
volatile是怎样实现了?比如一个很简单的Java代码:

instance = new Instancce() //instance是volatile变量

在生成汇编代码时会在volatile修饰的共享变量进行写操作的时候会多出Lock指令(具体的大家可以使用一些工具去看一下,这里我就把结果说出来)。我们想这个Lock指令肯定有神奇的地方,那么Lock前缀的指令在多核处理器下会发生什么事?主要由两个方面的影响:

将当前处理器缓存行的数据写回系统内存;
这个写回内存的操作会使得其他CPU里缓存了该内存地址的数据无效
彻底理解voliate

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/131166.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • C语言数组初始化

    C语言数组初始化转载博客代码编译运行环境:VS2017+Win32+Debug1.字符数组的初始化方式C语言中表示字符串有两种方式,数组和指针,字符数组是我们经常使用的方式。变量的定义包括指明变量所属类型、变量名称、分配空间以及初始化。可以看出,变量的初始化是变量定义的一部分。除了const变量需要显示初始化以外,其它变量如果在定义时未显示初始化,编译器会为变量以默认…

  • 通过bindservice方法开启的服务,通过什么方法解绑_controller调用多个service

    通过bindservice方法开启的服务,通过什么方法解绑_controller调用多个service绑定本地服务AndroidManifest.xml中声明服务:<serviceandroid:name=".TestLocalService"><intent-filter><actionandroid:name="maureen.intent.action.BIND_LOCAL…

  • 12年3D建模师的感悟—写给还在迷茫中的朋友

    12年3D建模师的感悟—写给还在迷茫中的朋友不知不觉,从事3d行业已经12年了。今天想把这么久以来积攒的3D建模的学习经验彻底讲一下,希望能对你有所帮助。1.什么人适合学习3D建模?这个问题我曾经回答过,目前来看,闲来无事的大学生,目前做着和3D建模有关工作的人,比如雕刻家,和30岁以下想要转行的人都是适合的。至于其他人群,我是不推荐的,比如高中生之类的,或者年纪太大的。前者推荐上个大学,后者推荐找个轻松一点的工作。2.3D建模的职业规划怎么样?如果是大学生可能要好一点,有机会进大厂,如果是半路出家,可能游戏外包工作室就是归宿。当然也不

  • javaME_javatype

    javaME_javatype一、首先,我们要了解浏览器是如何处理内容的。在浏览器中显示的内容有HTML、有XML、有GIF、还有Flash……那么,浏览器是如何区分它们,决定什么内容用什么形式来显示呢?答案是MIMEType,也就是该资源的媒体类型。媒体类型通常是通过HTTP协议,由Web服务器告知浏览器的,更准确地说,是通过Content-Type来表示的,例如:Content-Type:tex…

    2022年10月24日
  • python pandas读取csv文件_pandas将数据写入csv

    python pandas读取csv文件_pandas将数据写入csv1、首先设置pycharm三个地方改为UTF-82data=pd.read_csv(PATH+FILE_NAME,encoding=”gbk”,header=0,index_col=0)直接读入就可以了

  • 大数据理论体系

    大数据理论体系目录结构大数据是什么?大数据是如何发展起来的?大数据处理的基本流程是什么?为什么说数据不动代码动?移动计算比移动数据更划算?DAG对大数据处理有什么好处?批处理和流处理如何区分?有边界数据和无边界数据如何区分?批处理中如何提高CPU利用率?什么是事件时间和处理时间?Workflow设计模式指的什么?什么是商业智能(BI)?分布式锁是什么?如何实现?分布式事务是什么?如何实现?分布式锁和分布式事务有什么区别?CAP定理是什么?BASE理论是什么?分布式系统有哪些衡量指标?

发表回复

您的电子邮箱地址不会被公开。

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