码迷,mamicode.com
首页 > 其他好文 > 详细

Volatile关键字用法适合场景

时间:2015-02-09 18:10:12      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

Volatile用法适合场景,分以下几点说明:
1、Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与 

共享成员变量的原始值对比。

2、Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线 

程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。

3、volatile只保证了可见性,所以Volatile适合直接赋值的场景,如:多线程获取 a=a+count,a的值不一定是正确的,因为a=a+count包含了好几步操作,

而此时多个线程的执行是无序的,因为没有任何机制来保证多个线程的 执行有序性和原子性。volatile存在的意义是,任何线程对a的修改,都会马上被其他线程读取到,

因为直接操作主存,没有线程对 工作内存和主存的同步。所以,volatile的使用场景是有限的,在有限的一些情形下可以使用 volatile 变量替代锁。

要使 volatile 变量提供理想的线程安全,必须同时满足下面两个条件:1)对变量的写操作不依赖于当前值。2)该变量没有包含在具有其他 变量的不变式中

4、所以简单来说,volatile适合这种场景:一个变量被多个线程共享,线程直接给这个变量赋值。

Volatile关键字用法适合场景

标签:

原文地址:http://www.cnblogs.com/lxfeng/p/4281955.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!