Volatile:内存可见性

一、当写一个volatile变量时,JMM会把该线程对应的本地中的共享变量值刷新到主内存。

例子:

/*
* 一、volatile 关键字:当多个线程进行操作共享数据时,可以保证内存中的数据可见。
* 相较于 synchronized 是一种较为轻量级的同步策略。
*
* 注意:
* 1. volatile 不具备“互斥性”
* 2. volatile 不能保证变量的“原子性”
*/
public class TestVolatile {

public static void main(String[] args) {
ThreadDemo td = new ThreadDemo();
new Thread(td).start();

while(true){
if(td.isFlag()){
System.out.println("------------------");
break;
}
}

}

}

class ThreadDemo implements Runnable {

private volatile boolean flag = false;

@Override
public void run() {

try {
Thread.sleep(200);
} catch (InterruptedException e) {
}

flag = true;

System.out.println("flag=" + isFlag());

}

public boolean isFlag() {
return flag;
}

public void setFlag(boolean flag) {
this.flag = flag;
}

}

posted @ 2020-11-28 22:04  jock_javaEE  阅读(171)  评论(0)    收藏  举报