0
点赞
收藏
分享

微信扫一扫

#yyds干货盘点#单例模式的常见写法

单例模式的常见写法:饿汉式、懒汉式、注册式、ThreadLocal

饿汉式:

  •   类加载的时候进行实例创建  
  •   优点:执行性能高,效率好,没有加锁  
  •   缺点:系统创建大量的类时,全都加载到内存中,操作内存浪费  

懒汉式:

  •   只有在对象在使用的时候才会被初始化  
  •   双重检查锁  
  • volatile修饰对象,禁止指令重排序,返回初始化完整的对象
  • 两次判断null,在内部层进行synchronized修饰,保证只有一个实例被创建
  •   静态内部类实现  
  • 利用Java的静态内部类在调用时才会被加载的特性
  • 内部类中创建外层对象,外层访问静态内部类成员
  • 在私有构造函数中判断是否有值,有值则抛出异常,防止反射破坏单例

  注册式: 

  •   枚举单例  
  • 最优雅的写法
  • 在底层防止反射破坏
  • 天然的线程安全
  • 内部使用Map<String,T>存储
  • 不适合大量加载,因为在类加载的时候就会把实例注册到容器中
  •   容器式单例  
  • 对枚举进行改良,在使用时在去创建,放入到容器中
  • 判断当前类型名称是否存在,存在直接取,不存在,通过反射instance,放到容器中

  ThreadLocal: 

  •   类中声明一个ThreadLocal变量,存放类的实例  
  •   盼达实例是否存在,不存在,new一个放入,存在,直接取  
  •   在线程内唯一  
举报

相关推荐

0 条评论