中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

volatile解决变量可见性

volatile满足变量的可见性,会在写后面插入StoreLoad屏障,操作该关键字修饰的变量不会用CPU缓存,只能从内存中进行读取或写入。

如下代码有可能导致无法中断线程1,因每个线程在运行过程中都有自己的工作内存,那么线程1在运行的时候,会将stop变量的值拷贝一份放在自己的工作内存当中,在线程2更改了stop变量的值之后,但是还没来得及写入主存当中,线程2转去做其他事情了,那么线程1由于不知道线程2对stop变量的更改,因此还会一直循环下去。

线程1
boolean stop = false;
while(!stop){
doSomething();
}
线程2
stop = true;

使用volatile修饰stop变量解决该问题。另volatile并不解决原子性问题,如volatile long count=0;有两个线程做count++,得不到正确的结果。