转:java中volatile关键字的含义在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉。Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入了
同步块 和 volatile 关键字机制。sy...
分类:
编程语言 时间:
2014-06-06 08:16:27
阅读次数:
342
volatile关键字
volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。使用该关键字的例子如下:int
volati....
分类:
其他好文 时间:
2014-05-26 12:12:26
阅读次数:
210
背景
大家都知道线程之间共享变量要用volatile关键字。但是,如果不用volatile来标识,会不会导致线程死循环?比如下面的伪代码:
static int flag = -1;
void thread1(){
while(flag > 0){
//wait or do something
}
}
void thread2(){
//do something
f...
分类:
编程语言 时间:
2014-05-25 10:24:14
阅读次数:
220
说明:
******一个被volatile关键字修饰的变量可能会被意想不到的改变,本意就是“易变的”。
******对于被volatile修饰的变量,当编译器在编译的时候不会去假设该变量的值
******对于被volatile修饰的变量,当优化器优化时,必须每次都小心的重新读取该变量的值,而不能使用寄存器里的备份。
使用volatile关键字的几种情况:
******第一种情况:...
分类:
编程语言 时间:
2014-05-24 14:36:58
阅读次数:
235
volatile 影响编译器编译的结果,指出,volatile
变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++
在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。例如:volatile ...
分类:
其他好文 时间:
2014-05-11 23:27:27
阅读次数:
404
一 问题引入
JVM把内存分为两层,一层为大的主存,另外一个是工作内存(属于每个线程自己专属的),正常情况下,线程在用到某个变量的值时,都是先取到工作内存中进行处理,然后再写回主存,这样就会带来不同线程变量值不同步的问题。
volatile字面意思是易挥发,不稳定,比如100个线程同时访问修改的一个字段值,那么这种值的特性明显和JVM中高速缓存机制不相符,这种值是不适合放在各线程自己的寄存...
分类:
编程语言 时间:
2014-05-09 21:07:01
阅读次数:
324
Volatile修饰的成员变量在每次被线程访问时,都强迫从主内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到主内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入...
分类:
编程语言 时间:
2014-05-07 13:08:37
阅读次数:
312