根据:
http://www.ibm.com/developerworks/library/j-jtp03304/
在新的内存模型下,当线程A写入易失性变量V,并且线程B从V读取时,在写入V时对A可见的任何变量值现在都保证对B可见.
互联网上的许多地方声明以下代码永远不应该打印"错误":
public class Test {
    volatile static private int a;
    static private int b;
    public static void main(String [] args) throws Exception {
        for (int i = 0; i < 100; i++) {
            new Thread() {
                @Override
                public void run() {
                    int tt = b; // makes the jvm cache the value of b
                    while (a==0) {
                    }
                    if (b == 0) {
                        System.out.println("error");
                    }
                }
            }.start();
        }
        b = 1;
        a = 1;
    }
}
b …