volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的可见性。
原理:1)、volatile变量在写操作指令编译为汇编指令时在后面会添加Lock前缀指令引起处理器缓存写回到内存。
2)、一个处理器的缓存写回到内存会导致其他处理器的缓存无效。缓存一致性:多处理器下每个处理器通过嗅探在总线上传播的数据来检查自己的数据缓存的值是不是过期了,当处理器发现自己缓存的内存地址已经被修改,就会将当期的处理器的缓存行设置为无效。
使用注意特性:
class VolatilleFeaturesExample{
volatile long v1=0L;
public void set(long l){
v1=l; //单个的volatile变量的写 具有原子性
}
public void getAndIncrement()
v1++; //编译后等于下面的3个操作语义:long temp = get(); temp +=1; set(temp); 所有不具有原子性
}
piblic long get(){
return v1; //单个的volatile变量的读 具有原子性
}
使用特性:
1、可见性:对一个volatile的变量的读,总能看到(任意线程)对这个volatile变量的最后的写。
2、原子性:对任意单个volatile变量的读/写具有原子性,但类似于volatile++这种复合操作不具有原子性。
Volatile特性详解
429

被折叠的 条评论
为什么被折叠?



