懒汉式单例模式
/** * 懒汉式单例模式 */public class LazySingleton { /** * lazySingleton = new LazySingleton()这一行代码实际上是分三步执行的,伪代码如下: * 1.分配内存空间 memory = allocate() * 2.初始化对象 instance(memory) * 3.设置instance指向刚分配的内存地址,instance = memory,此时instance != null * 步骤2和步骤3之间并不存在数据依赖关系,而且无论重排前后程序的执行结果并未改变,因此这种重排优化是允许的 * 所以要使用volatile修饰是为了避免出现指定重排 */ private static volatile LazySingleton lazySingleton; private LazySingleton() { } public static LazySingleton getInstance() { //phase1:判断是否创建过实例 if (lazySingleton == null) { //phase2:加锁 synchronized (LazySingleton.class) { //phase3:双重检测锁,再次判断是否创建过实例 if (lazySingleton == null) { lazySingleton = new LazySingleton(); } } } return lazySingleton; }}