单例模式的基础知识
单例模式
单例模式的优缺点
优点
- 内存消耗小
- 全局只有一个实例
缺点
- 没有接口,扩展困难
- 如果要扩展单例,只能修改代码
创建单例的方法
饿汉式模式
- 直接创建-消耗内存-线程不安全
- 静态创建-线程不安全
懒汉式模式
- 判断为空再创建-线程不安全
- 双重检验为空再创建 使用synchronize关键字-线程安全
- 静态内部类创建-线程安全
注册式创建
- 简单注册-spring
- 枚举类创建
序列化
线程池
关于单例模式的问题
spring的单例会被回收吗?
- 注册式单例,被保存在ioc的缓存容器中,给每个实例起个名字,叫beanName、id
- ioc容器持有单例对象的引用
- 当对象为null或引用不被任何地方所持有时会被回收
- ioc容器本身也是个单例,ioc容器什么时候被回收,那么ioc中的beanName也就什么时候被回收
- ioc容器实在spring启动时初始化,在spring销毁时被回收
- spring中的单例Bean跟ioc容器同生死
spring的单例是线程安全的吗?
- 它由在beanFactory中由反射机制创建,被缓存到ioc容器中,相当于new Object()
- 所以他是线程安全的