Java中volatile变量有如下特性:
1、编译器和运行时都会注意到这个变量是共享的,不会对它进行重排序。
2、volatile变量不会被缓存到寄存器,因此读取volatile类型的变量时总会返回[color=red]最新[/color]写入的值。
3、volatile变量是一种比sychronized关键字轻量级的同步机制。
4、一般用来作为程序标示(开关)使用,如下:
5、volatile可以保持变量的可见性、但不能保证原子性。
1、编译器和运行时都会注意到这个变量是共享的,不会对它进行重排序。
2、volatile变量不会被缓存到寄存器,因此读取volatile类型的变量时总会返回[color=red]最新[/color]写入的值。
3、volatile变量是一种比sychronized关键字轻量级的同步机制。
4、一般用来作为程序标示(开关)使用,如下:
private volatile boolean asleep;
...
while(!asleep){
....;
}
5、volatile可以保持变量的可见性、但不能保证原子性。
private volatile int a=0;// a 只可能为1或0,它只是作为一个标示,用volatile可以保证可见性
while(a!=0){
.....
a=1;
}
//---------------------------------
private volatile int a=0;
while(a<1000){
a++;// volatile不能保证a的原子性,读取-加-赋值 这三个操作应该是原子的,用volatile就不合适了
.....
}