volatile是java的关键字,作用:①保证线程间的可见性;②防止指令重排。下面看一个demo,启动2个线程,一个线程读取flag变量的值,另外一个线程修改flag变量的值。
public class VolatileDemo {
private static int flag = 0;
//private volatile static int flag = 0;
public static void main(String[] args) {
new Thread(){
@Override
public void run() {
int localFlag = flag;
while (true){
if (localFlag != flag){
System.out.println("读取到被修改的flag值为:"+flag);
localFlag = flag;
}
}
}
}.start();
new Thread(){
@Override
public void run() {
int localFlag = flag;
while (true){
System.out.println("flag被修改为了:"+ ++localFlag);