内存可见性
内存可见性是指一个线程修改所使用对象时,其他线程也能看到对象的状态的变化。
由于缓存的存在,线程无法及时看到对象的修改
由于线程创建出来,其本身缓存的原因,所以其他线程修改对象状态的时候,本线程无法及时及时刷新本线程的缓存,可能无法看到对象状态的修改。
使用volatile关键字
使用volatile,可以让其他线程及时看到对象的状态发生改变,相当于线程废弃自己的缓存,直接操作内存 。
例:
package JUC;
public class TestVolatile {
public static void main(String[] args) {
ThreadDemo threadDemo = new ThreadDemo();
new Thread(threadDemo).start();
while (true){
if (threadDemo.isFlag()){
System.out.println("------------");
break;
}else {
System.out.println("000000000000");
}
}
}
}
class ThreadDemo extends Thread {
volatile boolean flag = false;
@Override
public void run() {
this.flag = true;
}
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
}