volatile关键字的作用和原理「建议收藏」

volatile关键字的作用和原理「建议收藏」文章目录一、volatile关键字的作用二、volatile的底层原理三、volatile的适用场景一、volatile关键字的作用二、volatile的底层原理三、volatile的适用场景

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


一、volatile关键字的作用

  • 1、保证变量写操作的可见性;
  • 2、保证变量前后代码的执行顺序;

二、volatile的底层原理

被volatile修饰的变量被修改时,会将修改后的变量直接写入主存中,并且将其他线程中该变量的缓存置为无效,从而让其它线程对该变量的引用直接从主存中获取数据,这样就保证了变量的可见性。
但是volatile修饰的变量在自增时由于该操作分为读写两个步骤,所以当一个线程的读操作被阻塞时,另一个线程同时也进行了自增操作,此时由于第一个线程的写操作没有进行所以主存中仍旧是之前的原数据,所以当两个线程自增完成后,该变量可能只加了1。因而volatile是无法保证对变量的任何操作都是原子性的。

三、volatile的适用场景

  • 1、变量的修改不依赖于变量本身
    像是i++、i+=这类的操作在多线程下都是不能保证变量的原子性的。
  • 2、该变量没有包含在具有其他变量的不变式中
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

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


相关推荐

  • pycharm 条件断点_linux打断点

    pycharm 条件断点_linux打断点前言遇到一个问题,由于数据量较大,直接debug调试太费时间,看了上面链接的博文,结合自身实践,于是有了这篇博文。流程打断点,右键断点,condition填入条件(当条件为true时会进入断点,开始调试),debug运行。具体如图。注:循环内赋值的变量可能无法使用,可用赋值前的变量代替,如b=A.a;条件里写A.a<100等等。其他debug用法只记录,不进行debug…

    2025年7月22日
    3
  • Nginx负载均衡配置简单配置方法

    Nginx负载均衡配置简单配置方法

    2022年3月7日
    36
  • MySQL练习题(经典50题)

    MySQL练习题(经典50题)MySQL练习题(经典50题)–建表–学生表CREATETABLEStudent(s_idVARCHAR(20),s_nameVARCHAR(20)NOTNULLDEFAULT‘’,s_birthVARCHAR(20)NOTNULLDEFAULT‘’,s_sexVARCHAR(10)NOTNULLDEFAULT‘’,PRIMARYKEY(s_id));–课程表CREATETABLECourse(c_idVARCHAR(20),c_nam

    2026年1月19日
    5
  • Eclipse背景颜色修改

    Eclipse背景颜色修改Eclipse背景颜色修改: 操作界面默认颜色为白色。对于我们长期使用电脑编程的人来说,白色很刺激我们的眼睛,所以我经常会改变workspace的背景色,使眼睛舒服一些。设置方法如下: 1、打开window->Preference,弹出Preference面板 2、展开General标签,选中Editors选项,展开。 3、选中TestEditors,右边出现Test

    2022年6月20日
    27
  • Android获取短信验证码并自动填充的两种方式「建议收藏」

    Android获取短信验证码并自动填充的两种方式「建议收藏」有些项目为了方便客户操作,减去客户输入短信验证码的时间,会要求安卓app能够获取收到的短信验证码并自动填充到输入框。所以,我整理了安卓获取短信验证码并自动填充输入框的两种方法,而且正式在项目中使用并无bug。      一:监听短信库的变化,获取收到的短信内容,并通过正则表达式取出数字验证码填充到输入框中。代码如下:      publicclassObtainSmsVerifyC

    2022年7月25日
    90
  • Spring AOP 详解

    Spring AOP 详解

    2021年5月10日
    132

发表回复

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

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