知识点 happen-before可见性和volatile的防止重排序,两个对同一个对象的锁内写,对下一次该对象的锁内读是可见的,这是HB规则的一条。DCL初始化以后都是非锁读的,但是由于可能的指令重排序,这就有个问题,初始化可能没完成就被读到了,volatile的目的是防止这种情况