java单例模式懒汉式&饿汉式
懒汉式
线程安全
在类加载的时候,已经进行实例化。缺点:如果没有用到该实例时,比较占内存
/**
* 饿汉式
* @author Lu.F
* @since 2022/10/21
**/
public class HungrySingleton {
private static final HungrySingleton instance = new HungrySingleton();
private HungrySingleton(){}
public static HungrySingleton getInstance(){
return instance;
}
}
懒汉式
①线程不安全,需要时才创建实例,节省空间
/**
* @author Lu.F
* @since 2022/10/21
**/
public class LazySingleton {
private static LazySingleton instance = null;
private LazySingleton(){}
public static LazySingleton getInstance(){
if (null == instance){
instance = new LazySingleton();
}
return instance;
}
}
②线程安全的写法,双重判断,volatile :禁止指令重排
/**
* @author Lu.F
* @since 2022/10/21
**/
public class SafeLazySingleton {
private static volatile SafeLazySingleton instance = null;
private SafeLazySingleton(){}
public static SafeLazySingleton getInstance(){
if (null == instance) {
synchronized (SafeLazySingleton.class) {
if (null == instance) {
instance = new SafeLazySingleton();
}
}
}
return instance;
}
}