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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql备份的三种方案

    mysql备份的三种方案本文转自https://www.cnblogs.com/fengzhongzhuzu/p/9101782.html建议阅读:https://www.cnblogs.com/clsn/p/8150036.html一、备份的目的做灾难恢复:对损坏的数据进行恢复和还原需求改变:因需求改变而需要把数据还原到改变以前测试:测试新功能是否可用二、备份需要考虑的问题可以容忍丢失多长时间的…

    2022年6月17日
    30
  • 智能家居在中国发展前景被看好

    智能家居在中国发展前景被看好市场状况:业务需求持续增加据IMSResearch预测,在未来五年,全球智能家居设备市场实现2倍增长,从2012年的不足2000万个节点增长至2017年的9000多万个节点。其中的主要驱动力之一是越来越多的服务供应商涌入托管式家居控制领域。到目前为止,ZigBee和Z-Wave深受大量托管服务供应商的青睐。随着市场的开放,智能家居在中国的发展前景广被看好,智能家居市场发展注重品牌和市场定位

    2022年6月22日
    21
  • SQL语句多表连接查询语法

    SQL语句多表连接查询语法总结:内连接就是两个表的交集,左外连接就是左边表加两表交集,右外连接就是右边表加两表交集一、外连接1.左连接leftjoin或leftouterjoinSQL语句:select*fromstudentleftjoinscoreonstudent.Num=score.Stu_id;2.右连接rightjoin或r…

    2022年5月3日
    755
  • Open-Drain V.S. Push-Pull

    Open-Drain V.S. Push-Pull

    2021年8月26日
    52
  • java struts2 漏洞_Struts2漏洞简述

    java struts2 漏洞_Struts2漏洞简述S2-005漏洞S2-005是由于官方在修补S2-003不全面导致绕过补丁造成的。我们都知道访问Ognl的上下文对象必须要使用#符号,S2-003对#号进行过滤,但是没有考虑到unicode编码情况,导致\u0023或者8进制\43绕过。S2-005则是绕过官方的安全配置(禁止静态方法调用和类方法执行),再次造成漏洞。Payload如下:http://www.xxxx.com/aaa.action…

    2022年7月19日
    21
  • 从零开始的 Android 开发[通俗易懂]

    从零开始的 Android 开发[通俗易懂]文章目录0、简介0.1个人情况0.2现状0.3展望0.4一些问题(IDE/编程语言)0.5更新日志0、简介0.1个人情况先说一说自己的情况吧。某985大学的本科学生,因为对Android开发感兴趣,所以先学习了Java(教材是《疯狂Java讲义》,这本书非常好),之后又开始按照郭霖先生的《第一行代码(第二版)》学习Android开发。《疯狂…

    2022年6月4日
    36

发表回复

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

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