单例模式的基础知识

单例模式

单例模式的优缺点

优点

  • 内存消耗小
  • 全局只有一个实例

缺点

  • 没有接口,扩展困难
  • 如果要扩展单例,只能修改代码

创建单例的方法

饿汉式模式

  • 直接创建-消耗内存-线程不安全
  • 静态创建-线程不安全

懒汉式模式

  • 判断为空再创建-线程不安全
  • 双重检验为空再创建 使用synchronize关键字-线程安全
  • 静态内部类创建-线程安全

注册式创建

  • 简单注册-spring
  • 枚举类创建

序列化

线程池

关于单例模式的问题

spring的单例会被回收吗?

  • 注册式单例,被保存在ioc的缓存容器中,给每个实例起个名字,叫beanName、id
  • ioc容器持有单例对象的引用
  • 当对象为null或引用不被任何地方所持有时会被回收
  • ioc容器本身也是个单例,ioc容器什么时候被回收,那么ioc中的beanName也就什么时候被回收
  • ioc容器实在spring启动时初始化,在spring销毁时被回收
  • spring中的单例Bean跟ioc容器同生死

spring的单例是线程安全的吗?

  • 它由在beanFactory中由反射机制创建,被缓存到ioc容器中,相当于new Object()
  • 所以他是线程安全的