问这个问题的人就说明没理解双重检查锁,看到中间状态的情况是,第一个线程跑完了方法执行完new的步骤之一:分配空间,但是没执行完设置初始值,此时第二个线程到来,在synchronized前一个if判断时就发现不为null,直接返回了单例,同时第二个线程还用返回的这个单例进行了操作,只有这样才会出现这个问题,也就意味着这个第二个线程都没走到synchronized