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

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

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


一、volatile关键字的作用

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

二、volatile的底层原理

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

三、volatile的适用场景

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

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

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

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

(0)


相关推荐

  • mysql左连接查询慢[通俗易懂]

    mysql左连接查询慢[通俗易懂]之前一直用的Oracle,今天用mysql查询一个很普通的左连接的时候,发现速度很慢。selectx.fid,x.isbirt,x.fscoresum,x.fsystemscore,x.feffectivescorefromtableaxleftjointablebhonx.fitemid=h.fidwhereh.fprojectid=’’这个sql耗时:2s多。我有点吓到了,后来我百度后发现然后我换了表的位置selectx.fid,x.isbirt,x.fsc

  • Avalondock 技巧之如何隐藏浮动面板停靠器

    Avalondock 技巧之如何隐藏浮动面板停靠器avalondock技巧之如何隐藏浮动面板停靠器之前开发的一个项目需要实现窗口的浮出,拖拽,停靠等功能,于是想到了神器Avalondock,这个框架功能相当强大,而且能实现多种主题样式的控件,特别是窗口的浮动停靠等功能。目前该框架有收费版本和开源版本,我之前的项目使用的是avalondockv2.0的,目前最新的是v4.0。官方链接:https://archive.codeplex.com/?p=avalondock.Git链接:https://github.com/xceedsoftware

  • ubuntu16.04安装MATLAB R2017b步骤详解(附完整文件包)「建议收藏」

    ubuntu16.04安装MATLAB R2017b步骤详解(附完整文件包)「建议收藏」摘要:介绍在ubuntu16.04中从下载到安装成功的完整步骤。本文给出MATLABR2017b(Linux系统)的完整安装包百度云盘下载地址,逐步介绍一种简单易行的安装方法,在桌面创建快捷方式,最终完整运行。

  • 带小数的进制转换[通俗易懂]

    带小数的进制转换[通俗易懂]整数的进制转换方法相信大家应该都很清楚,但是大家有没有想过带小数的数据又该怎样进行进制的转换呢?下面就以二进制为例进行说明。1.带小数的二进制转换为十进制:例如二进制数1011.0111,在转换过

  • Web 前端开发学习资料整理

    以前学习过一段时间的web前端开发,整理了一些我看过的/我认为比较好的学习资料(网站、书籍)。我只是闲来无事整理一下,如有不足,嘴下留情..毕竟分享不是一件坏事,共同学习…一、语言基础(以书和网站为主)1.HTML&CSS:(1)入门:Codeademy上的html&css课程——在线交互式编程平台,弄清楚基本概念和基本语法w3school上的HTML/CSS教程——

  • kettle工具的简单使用

    kettle工具的简单使用1.使用kettle抽取CSV文件通过Kettle工具抽取CSV文件csv_extract.csv中的数据并保存至数据库extract的数据表csv中。(1)、创建一个转换通过使用Kettle工具,创建一个转换csv_extract,并添加“CSV文件输入”控件、“表输出”控件以及Hop跳连接线,具体如图所示。(2)、配置CSV输入插件双击“CSV文件输入”控件,进入“CSV文件输入”界面。完成配置。单击【浏览】按钮,选择要抽取的文件csv_extract.c…

    2022年10月16日

发表回复

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

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