饿汉模式(饥不择食):在类初始化时直接创建对象,无论是否需要这个对象都会创建,不存在线程安全问题
1、直接实例化
优点:线程安全、简洁
缺点:在类被加载的时候就将实例创建出来,没有起到lazy loading的效果
2、枚举
优点:线程安全、简洁
3、静态代码块
优点:线程安全,适合复杂的实例化
懒汉模式(不到万不得已不创建):
1、线程不安全
优点:在使用到时才创建实例
缺点:在检验到instance为null后,在创建实例之前,可能被其它线程进入到判断语句中,线程不安全
2、线程安全:
优点:线程安全、在使用到时才创建实例
缺点:效率较低
3、双重同步锁:
优点:线程安全、在使用到时才创建实例、效率稍高一些
4、静态内部类:
优点:
线程安全、在使用到时才创建实例、效率高、简单