单例模式

  • 饿汉模式
package com.wz.cinema.platform.server.util;public class DataManager {/*** 单例模式:整个类在运行中只会有一个实例* 既然是在运行中只有一个实例,那么就必须* 考虑多线程环境** 单例模式分为懒汉模式和饿汉模式* 饿汉模式本身就是线程安全的单例*///饿汉模式(实例开始会初始化)private DataManager(){}private static final DataManager instance = new DataManager();public static DataManager getInstance(){return instance;}
}
  • 懒汉模式
package com.wz.cinema.platform.server.util;public class DataManager {/*** 单例模式:整个类在运行中只会有一个实例* 既然是在运行中只有一个实例,那么就必须* 考虑多线程环境** 单例模式分为懒汉模式和饿汉模式* 饿汉模式本身就是线程安全的单例*///懒汉模式没有初始值,第一次用的时候才会赋值//考虑多线程并发情况下依然存在多例private static volatile DataManager instance;
//    public static DataManager getInstance(){
//        //先判断在赋值
//        if (instance== null){
//            instance = new DataManager();
//        }
//        return instance;
//    }//加锁,在方法上家的锁从效率层面来说比较低下】//因为整个类只有一个实例,只需要第一个方位的线程将实例创建出来之后//后面的线程秩序要拿出实例即可//方法上加锁会让抢到锁的线程拿到实例,其他线程都会阻塞
//public synchronized static DataManager getInstance(){
//    //先判断在赋值
//    if (instance== null){
//        instance = new DataManager();
//    }
//    return instance;
//}//判断实例为空时才会抢锁,不为空直接返回实例
public  static DataManager getInstance(){//先判断在赋值if (instance== null){synchronized (DataManager.class){if (instance == null){instance = new DataManager();}}}return instance;
}}

双检锁:double-check-lock

双重检查锁(Double-Check Lock,也称为双重检查锁定)是在单例模式中使用的一种优化技术,用于在多线程环境下延迟初始化实例并保证线程安全。