volatile关键字简介
来源:互联网 发布:002175 东方网络 编辑:程序博客网 时间:2024/06/06 00:49
一、单线程下变量读取操作
jvm运行时刻内存的分配。其中有一个内存区域是jvm虚拟机栈,每一个线程运行时都有一个线程栈,线程栈保存了线程运行时候变量值信息。当线程访问某一个对象时候值的时候,首先通过对象的引用找到对应在堆内存的变量的值,然后把堆内存变量的具体值load到线程本地内存中,建立一个变量副本,之后线程就不再和对象在堆内存变量值有任何关系,而是直接修改副本变量的值,在修改完之后的某一个时刻(线程退出之前),自动把线程变量副本的值回写到对象在堆中变量。这样在堆中的对象的值就产生变化了。 出于运行速率的考虑,java编译器会把经常经常访问的变量放到缓存(严格讲应该是工作内存)中,读取变量则从缓存中读。
二、多线程下volatile修饰变量的读取操作
在多线程编程中,内存中的值和缓存中的值可能会出现不一致。volatile用于限定变量只能从内存中读取,保证对所有线程而言,值都是一致的。但是volatile不能保证原子性,也就不能保证线程安全。
三、volatile的特点
jvm运行时刻内存的分配。其中有一个内存区域是jvm虚拟机栈,每一个线程运行时都有一个线程栈,线程栈保存了线程运行时候变量值信息。当线程访问某一个对象时候值的时候,首先通过对象的引用找到对应在堆内存的变量的值,然后把堆内存变量的具体值load到线程本地内存中,建立一个变量副本,之后线程就不再和对象在堆内存变量值有任何关系,而是直接修改副本变量的值,在修改完之后的某一个时刻(线程退出之前),自动把线程变量副本的值回写到对象在堆中变量。这样在堆中的对象的值就产生变化了。 出于运行速率的考虑,java编译器会把经常经常访问的变量放到缓存(严格讲应该是工作内存)中,读取变量则从缓存中读。
二、多线程下volatile修饰变量的读取操作
在多线程编程中,内存中的值和缓存中的值可能会出现不一致。volatile用于限定变量只能从内存中读取,保证对所有线程而言,值都是一致的。但是volatile不能保证原子性,也就不能保证线程安全。
三、volatile的特点
1.保证读取的可见性 、可读性
2.禁止指令重排
PS:指令重排序:http://blog.csdn.net/liangyihuai/article/details/50670215
2.禁止指令重排
PS:指令重排序:http://blog.csdn.net/liangyihuai/article/details/50670215
0 0
- volatile关键字简介
- volatile关键字简介
- Java关键字:transient,strictfp和volatile简介
- volatile关键字
- 关键字volatile
- volatile关键字
- volatile关键字
- volatile关键字
- volatile关键字
- volatile关键字
- volatile关键字
- volatile关键字
- volatile关键字
- volatile关键字
- volatile关键字
- 关键字volatile
- volatile关键字
- volatile关键字
- Eclipse中jsp、js文件编辑时,卡死现象解决汇总
- php 的aes加密
- Android多媒体MediaStore运用
- pc端软件与移动app的区别是什么?
- 【打CF,学算法——三星级】CodeForces 689B Mike and Shortcuts (最短路+spfa)
- volatile关键字简介
- unity调取windows保存或读取窗口
- hibernate执行hql查询出现java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I之解法
- PullToRefreshListView addHeadView的正确姿势
- STM32 ——端口复用和重映射
- [mtk]按power键亮屏速度慢问题
- 几何画板对象进行删除和拖动的技巧
- domain的一些理解
- Jetty和tomcat的比较