Java的Volatile关键字的作用

Java的Volatile关键字的作用VolatileVolatile概念是Java特有的。如果你理解它解决的问题,会更容易理解它。如果一个变量,例如一个计数器正在被一个线程使用,有可能计数器的一个副本放在CPU高速缓存里,并且每次修改时,仅修改高速缓存的内容,而不是写到主存。JVM会决定什么时候更新主存。甚至当其他线程从主存里读取计数器的值时,有可能读到过期的值。如果一个变量用volatile修饰,不论一个线程读还是写此变量,总是从主存里读写。作为进一步的保证,当一个写线程写一个volatile修饰的变量时,写线程能看到的所有变

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

Volatile

  • Volatile 概念是Java特有的。如果你理解它解决的问题,会更容易理解它。
  • 如果一个变量,例如一个计数器正在被一个线程使用,有可能计数器的一个副本放在CPU 高速缓存里,并且每次修改时,仅修改高速缓存的内容,而不是写到主存。JVM会决定什么时候更新主存。甚至当其他线程从主存里读取计数器的值时,有可能读到过期的值。
  • 如果一个变量用volatile修饰,不论一个线程读还是写此变量,总是从主存里读写。
  • 作为进一步的保证,当一个写线程写一个volatile修饰的变量时,写线程能看到的所有变量都会和该volatile修饰的变量一起写到主存。相似的,一个读线程读取volatile变量时,能看到的所有变量的最新值。
  • Volatile 起作用是因为为了提升性能,计算硬件的结构有多层的存储。
  • 如果只有一个线程写 volatile 变量,多个读线程进行volatile变量的读操作,仅用volatile修饰就足够了。
  • 如果多个写线程写 volatile 变量,需要synchronized关键字保证写操作的原子性。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

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


相关推荐

  • Android中的shell循环命令

    Android中的shell循环命令新建test.txt,写入:i=0;while[$(($i))-le5];doi=$(($i+1));echo$i;done;执行这个文件adbshell<test.txt

    2022年7月24日
    7
  • python android开发_python编制应用程序

    python android开发_python编制应用程序本节目录:1.下载和安装ScriptingLayerforAndroid(SL4A)2.下载和安装Pythonforandroid3.第一个HelloWorld程序1.下载和安装ScriptingLayerforAndroid(SL4A)ScriptingLayerforAndroid(SL4A)是一个开源项目,目标是为android系统提供脚本语言的支持,使用…

    2022年8月12日
    9
  • 个人服务器搭建违法_自建服务器

    个人服务器搭建违法_自建服务器在win10系统上,安装git,作为客户端安装:Git-2.18.0-64-bit.exe安装步骤:都是简单的安装过程,只截图简单表示下只有第4、8两步有点更改1选择安装路径。234我选择了用notepad++作为编辑器5678修改默认的控制台,用windows的cmd.exe9最后一步创建了10完成转载于:https://…

    2022年9月28日
    2
  • elastic search面试题_elasticsearch实战

    elastic search面试题_elasticsearch实战1.什么是Elasticsearch?Elasticsearch是一个基于Lucene的搜索引擎。它提供了具有HTTPWeb界面和无架构JSON文档的分布式,多租户能力的全文搜索引擎。Elasticsearch是用Java开发的,根据Apache许可条款作为开源发布。2.ES中的倒排索引是什么?传统的检索方式是通过文章,逐个遍历找到对应关键词的位置。倒排索引,是通过分词策略,形成了词和文章的映射关系表,也称倒排表,这种词典+映射表即为倒排索引。其中词典中

    2025年11月5日
    4
  • vs2010查看quartz.net 2.1.2的源码时其中一报错的解决方法

    vs2010查看quartz.net 2.1.2的源码时其中一报错的解决方法

    2021年8月24日
    53
  • matlab的解决反复激活问题的license.lic文件[通俗易懂]

    matlab的解决反复激活问题的license.lic文件[通俗易懂]%%%%%%%%%%%%%%%%%%%%%%%%%%%%INCREMENTAerospace_BlocksetMLM99permanentuncounted\A05070F00D1EB1F92326VENDOR_STRING=QQ=47399897HOSTID=ANY\ck=216SN=888888TS_OKINCREMENTAerospace_ToolboxMLM99permanentuncounted\6090F

    2022年7月26日
    21

发表回复

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

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