饿汉式:
class Ehan{ private Ehan(){} private static Ehan singleton = new Ehan(); public static Ehan getInstance(){ return singleton; } }
关于饿汉式单例模式,不存在有多个实例被创建的风险。因为该类只有唯一的一次实例化操作,就是在类加载的时候初始化对象。
懒汉式:
双检查:
class Baohan{ private Baohan(){} private volatile static Baohan singleton; public static Baohan getInstance(){ if(singleton == null){ synchronized (Baohan.class){ if(singleton == null){ singleton = new Baohan(); } } } return singleton; } }
关于懒汉式单例模式,只有被调用的时候才会去实例化对象,属于延迟加载。并且为了保证在多线程环境中不会出现多个对象的问题,在方法里面使用synchronized加锁,并且变量使用volatile关键字来修饰,从而避免了指令重排序导致实例化不完整的问题。还有一种方法是使用内部静态类。
参考链接:https://blog.csdn.net/justloveyou_/article/details/64127789