应用场景
1)整个业务系统只使用一个redis连接、发号器;
2)SpringIOC容器中的bean;
3)sptringboot中的Controller、service、dao层中通过@Autowire注入的对象默认都是单例的。
分类
懒汉:jvm启动时,该对象还没有创建,在使用时才会创建,即延迟创建;
饿汉:与懒汉相反,提前创建对象。
实现步骤
1)私有化构造函数;
2)提供获取单例的方法。
饿汉式优缺点
1)优点:实现简单,没有多线程同步问题;
2)缺点:不管有没有使用,instance对象一直占着这块内存;
如何选择
对象不大,且创建不复杂,则使用饿汉式;
其他情况则采用懒汉实现方式。
单例模式在源码中的使用
饿汉:Runtime类
懒汉:DeskTop类