使一个变量在多个线程间可见
public class T {
/*volatile*/ boolean running=true;//volatile 通知其他线程值改变了
void m(){
System.out.println("m start");
while(running){
}
System.out.println("m end!");
}
public static void main(String[] args) {
T t=new T();
new Thread(t::m,"t1").start();
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
t.running=false;
}
}
以上代码的running变量不加volatile会阻塞,加了volatile代码才会执行下去。
也就是volatile的作用是,当这个变量的值改变了,会通知所有引用这个变量的其他进程。