public class TestVolatileDemo { //加 volatile 或者 System.out.println(bChanged); 每次都能退出 //不加 有时候退出 有时候死循环 // // volatile private static boolean bChanged = false; public static void main(String[] args) throws Exception { new Thread() { @Override public void run() { for (;;) { //synchronized (TestVolatileDemo.class) { // 加上同步锁 当前线程的变量bChanged 会变成 volatile 的效果 //} if (bChanged == !bChanged) { System.out.println("!= "+bChanged); System.exit(0); } } } }.start(); Thread.sleep(1); new Thread() { @Override public void run() { for (;;) { bChanged = !bChanged; //System.out.println(".."); } } }.start(); } }