如下例子可以试试:有volatile和没有volatile的区别 有 volatile可以保持共享 变量的可见性和防止程序的指令重排,会打印 出"flag = false" 没有volatile的话就不会打印出"flag = false" public class VolatileTest { public volatile boolean flag = true; public static void main(String[] args) throws InterruptedException { VolatileTest obj = new VolatileTest(); Thread thread = new Thread(){ int i = 0; @Override public void run() { while (obj.flag){ i++; //System.out.println("flag = true");有点疑惑 ,打开注释后,没有volatile 也可以实现可见性 } System.out.println("flag = false"); } }; thread.start(); Thread.sleep(1000); obj.flag = false; System.out.println("main thread end"); } }