public class Singleton { private volatile static Singleton instance; private Singleton() { } public static Singleton getIntance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } } volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。 当成员变量发生变化时,强迫线程将变化值回写到共享内存。 这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。