volatile说明-并发(转载)
来源:互联网 发布:营销数据分析 pdf 编辑:程序博客网 时间:2024/05/17 23:48
书上也有一段话
基本上,如果一个域可能会被多个任务同时访问,或者这些任务中至少有一个是写入任务,那么你就应该讲这个域设置为volatile的。如果你将一个域设置为volatile,那么它就会告诉编译器不要执行任何移除读取和写入操作的优化,这些操作的目的是用线程中的局部变量维护对这个域的精确同步。
以下转自http://blog.csdn.net/blueheart20/article/details/1591874
在Java中设置变量值的操作,除了long和double类型的变量外都是原子操作,也就是说,对于变量值的简单读写操作没有必要进行同步。这在JVM 1.2之前,Java的内存模型实现总是从主存读取变量,是不需要进行特别的注意的。而随着JVM的成熟和优化,现在在多线程环境下volatile关键字的使用变得非常重要。在当前的Java内存模型下,线程可以把变量保存在本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量值的拷贝,造成数据的不一致。要解决这个问题,只需要像在本程序中的这样,把该变量声明为volatile(不稳定的)即可,这就指示JVM,这个变量是不稳定的,每次使用它都到主存中进行读取。一般说来,多任务环境下各任务间共享的标志都应该加volatile修饰。
在实际工作中很少有用到volatile这个关键字,今天在看一段开源代码时碰到它,查了一下它的用法 :
用在多线程,同步变量 线程为了提高效率,将某成员变量(如A)拷贝了一份(如B),线程中对A的访问其实访问的是B。只在某些动作时才进行A和B的同步。因此存在A和B不一致的情况。volatile就是用来避免这种情况的。
volatile告诉jvm, 它所修饰的变量不保留拷贝,直接访问主内存中的(也就是上面说的A)
其他参考
http://blog.csdn.net/ns_code/article/details/17101369
http://blog.csdn.net/xymyeah/article/details/3193187
- volatile说明-并发(转载)
- volatile 说明 (转载)
- Java并发编程:volatile关键字解析(转载)
- Java并发编程:volatile关键字解析(转载)
- Java并发编程:volatile关键字解析(转载)
- Java并发编程:volatile关键字解析(转载)
- 关于volatile关键字的说明以及测试 (转载)
- [转载]Java并发编程:volatile关键字解析
- (转载)Java并发编程:volatile关键字解析
- Java并发编程:volatile关键字解析[转载]
- 转载:Java并发编程:volatile关键字解析
- volatile 介绍(转载)
- volatile介绍(转载)
- java并发(volatile关键字)
- volatile的用法(转载)
- volatile 说明
- Java并发编程(三)volatile域
- java并发编程(2)--volatile(转)
- “闪存2.0加速数据中心存储变革”论坛即将召开
- BZOJ 1218 HNOI2003 激光炸弹 暴力
- hdu5105给你一个方程,让你求极值(直接暴力)
- 将一个文件从一个文件夹拷贝到另一个文件夹的java代码
- 基于js和css3的缓冲图标
- volatile说明-并发(转载)
- CSDN的注册
- Amazon Dynamo系统架构
- iOS坐标系 转化为数学坐标系的方法
- 如何升级思科路由器的rommon
- 广东电信:省IT
- inpainting小工具的完善(2)-- 随意选区,页面布局
- 全面分析Java的垃圾回收机制
- Spring MVC 原理