volatile保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。
它只保证读不保证写,所以它的使用场景为“一个线程写多个线程读”。如果有多个线程写某个变量则用synchronized。
public class VolatileCase {
private volatile static boolean ready;//该ready多个线程可见,否则不可见
private static int number;
//
private static class PrintThread extends Thread{
@Override
public void run() {
System.out.println("PrintThread is running.......");
while(!ready);//无限循环
System.out.println("number = "+number);
}
}
public static void main(String[] args) {
new PrintThread().start();
SleepTools.second(1);
number = 51;
ready = true;//主线程修改ready另外一个线程也可见
SleepTools.second(5);
System.out.println("main is ended!");
}
}