首页 技术 正文
技术 2022年11月12日
0 收藏 867 点赞 2,624 浏览 914 个字

volatile关键字的使用
volatile关键字
原理
适合使用volatile关键字的情况
当且仅当满足以下所有条件时,才==应该==使用volatile关键字:
volatile关键字的作用
volatile关键字
volatile关键字所修饰的变量即volatile变量,这是Java所提供的一种稍弱的同步机制,用于确保对volatile变量的更新能够通知到其他的线程。

原理
要理解volatile关键字的原理,需要先了解Java内存模型(JMM),在这里不做展开。对变量采用volatile关键字进行修饰,可以使得改变量具备以下两种特性:

变量可见性 ,某一线程对volatile变量的修改,其他线程将能够立即可见;
即volatile变量不会被缓存在线程的工作空间或者别的对处理器不可见的地方,对volatile变量的修改会立即同步到主内存中。(JMM先行发生原则之一:volatile规则——对volatile变量的写操作先行发生于后面对这个变量的读操作。)
有序性 volatile关键字通过增加内存屏障的方式来限制指令重排,因此编译器与JVM不会将对volatile变量的操作与其他内存操作一起重排序;
适合使用volatile关键字的情况
volatile变量通常用于做某个操作完成、发生中断或者其他状态表示的标志,例如用在检查某个状态标记以判断是否退出循环的情况下。
1
当且仅当满足以下所有条件时,才应该使用volatile关键字:
1、对变量的写入操作不依赖于变量的当前值,或者你能确保只有单个线程能够更新变量的值。
2、该变量不会与其他状态变量一起纳入不变性条件中
3、在访问变量时不需要加锁。
1
2
3
volatile关键字的作用
volatile关键字对可见性的影响比volatile变量本身更加重要,volatile关键字不仅仅影响所修饰的变量的可见性。当线程A写入一个volatile变量,线程B稍后去读取该volatile变量时,在写入volatile变量之前对线程A可见的所有变量的值,在B读取了volatile变量之后,都对线程B可见(内存屏障)。

volatile关键字并不能保证原子性。
———————

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,031
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,520
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,368
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,148
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,781
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,860