mtwm.net
当前位置:首页 >> volAtilE特性 >>

volAtilE特性

volatile是个类型限定符.声明为volatile的变量表明它具有与优化相关的特殊属性.volatile用于强制某个实现屏蔽可能的优化.例如,对于具有内存映象输入/输出的机器,指向设备寄存器的指针可以声明为指向volatile的指针,目的是防止编译器通过指针删除明显多余的引用.

任何被volatile修饰的变量,都不拷贝副本到工作内存,任何修改都及时写在主存.因此对于Valatile修饰的变量的修改,所有线程马上就能看到,但是volatile不能保证对变量的修改是有序的.什么意思呢?假如有这样的代码:Java代码 public

volatile具有可见性、有序性,不具备原子性.注意,volatile不具备原子性,这是volatile与java中的synchronized、java.util.concurrent.locks.Lock最大的功能差异,这一点在面试中也是非常容易问到的点.下面来分别看下可见性、有序性、原子性

当我们声明共享变量为volatile后,对这个变量的读/写将会很特别.理解volatile特性的一个好方法是:把对volatile变量的单个读/写,看成是使用同一个监视器锁对这些单个读/写操作做了同步.下面我们通过具体的示例来说明,请看下面的示例代

一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了.精确地说就是,优化器在用到这个变量时必须每次都小心地重

在当前的Java内存模型下,线程可以把变量保存在本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写.这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量值的拷贝,造成数据的

焦渣特征(CRC)煤炭热分解以后剩余物质的形状.根据不同形状分为8个序号,其序号即为焦渣特征代号. 1、粉状.全部是粉末,没有相互粘着的颗粒; 2、粘着.用手指轻碰即成为粉末状或基本上是粉末状,其中较大的团块轻轻一碰机即

对这个变量的读/写将会很特别.理解volatile特性的一个好方法是:把对volatile变量的单个读/写

用volatile关键字定义变量,相当于告诉编译器,这个变量的值会随时发生变化,每次使用时都需要去内存里重新读取它的值,并不要随意针对它作优化.不使用volatile定义的变量,可能因为编译器优化而出现一些问题,具体可以看给出的参考资料,里面有一个例子.建议使用volatile变量的场所:(1) 并行设备的硬件寄存器(2) 一个中断服务子程序中会访问到的非自动变量(全局变量)(3) 多线程应用中被几个任务共享的变量

网站首页 | 网站地图
All rights reserved Powered by www.mtwm.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com