双重锁定检查(DCL,Double Check Lock)---单例模式
public class Singleton { // volatile防止指令重排序 private volatile static Singleton instance = null; public static Singleton getInstance() { // 多线程竞争情况下,其他线程检测到instance不为空 if (null == instance) { synchronized (Singleton.class) { // 多线程竞争情况下,如果其他线程第一次检测到instance为空,加锁创建完对象后再判断一次。 if (null == instance) { // 线程一被指令重排,先执行了赋值,但还没执行完构造函数(即未完成初始化) instance = new Singleton(); } } } return instance; } }