通过阅读CSDN上博客,记录自己的理解:
单例模式分为:
饿汉式
“一劳永逸”,因此是在类加载的时候就创建好,放在那。
懒汉式
每次调用,每次返回,引出了一个高大上的名词:延迟加载
双重检查锁定(Double-Check Locking)
如果有多个线程对一个变量的状态进行判断,则需要将这个变量使用volatile修饰。
class LazySingleton { private volatile static LazySingleton instance = null; private LazySingleton() { } public static LazySingleton getInstance() { //第一重判断 if (instance == null) { //锁定代码块 synchronized (LazySingleton.class) { //第二重判断 if (instance == null) { instance = new LazySingleton(); //创建单例实例 } } } return instance; } }
二者的结合(IoDH)
使用静态内部类,将创建外部类实例的工作交给内部类实现(内部类是饿汉式)