[单件模式] 2. “双重检查加锁”是指对单件实例进行双重null检查，对类型加锁

首先检查实例是否已经创建了，如果尚未创建，“才”进行类型同步。 这样一来，只有第一次会同步，这正是我们想要的。

如果性能是你关心的重点， 那么这个做法可以帮你大大地减少 getInstance() 的时间耗费。

1，使用volatile静态变量
被声明为volatile的所有变量的读取和写入是原子的。原子操作不可能交错，所以使用它们时不必担心线程干扰的问题。
使用volatile变量减少了内存一致性错误的风险，因为volatile变量的任何写入操作都会和对同一个变量的后续读取建立发生前关系。