order - JiyangM/spring GitHub Wiki

参考《java高并发程序详解》

有序性

jvm执行代码的时候为了提升效率会进行指令重排序。在多线程环境下可能带来问题。
private static Boolean init = false;

    public static void main(String[] args) {
        while (!init) {
            loadContext();
            init = true;
        }
    }

在多线程环境下,由于指令重排序 init = true;loadContext();,线程A进行操作的时候首先将init赋值为true,然后继续向下执行,此时线程B读到init 的值已经变为true,则返回一个空的Context();

volatile和 synchronized都保证了有序性!