单例模式

单例模式的目的:全局唯一性。

实现的方式:构造函数私有化,静态方法返回单例对象

常见的实现模式及代码:

懒汉式:延迟加载,不会在启动的时候加载,降低了启动时间,

缺陷:在多线程环境下,有线程安全的问题。

例如:线程AB同时进入if 中的代码,但是A线程执行较快,B线程出现停顿,A在初始化完毕,并且赋值了之后,B才开始初始化,这时候 instance 的值就会出现问题。

public class SingleTon{
   private static SingleTon  INSTANCE = null;
   private SingleTon(){}
   public static SingleTon getInstance() {  
     if(INSTANCE == null){
        INSTANCE = new SingleTon(); 
     }
     return INSTANCE ;
  }
}

饿汉式:

启动的时候加载,增加了项目的启动时间

public class SingleTon{
   private static SingleTon INSTANCE = new SingleTon();
   private SingleTon(){}
   public static SingleTon getInstance(){ return INSTANCE; }
}

加锁懒汉式:

在多线程环境下,会影响性能。

    public class SingleTon{
      private static SingleTon  INSTANCE = null;
      private SingleTon(){}
      public static SingleTon getInstance(){
        if(INSTANCE == null){
          synchronized(SingleTon.class){
          if(INSTANCE == null){ 
             INSTANCE = new SingleTon();
          } 
        } 
      } 
      return  INSTANCE ;
     }
    }

静态内部类:

在调用getInstance方法的时候初始化,并且不存在线程安全问题。而且作为局部变量,INSTANCE 是不可被外部修改的。

    public class SingleTon{
      private SingleTon(){}
     
      private static class SingleTonHoler{
         private static SingleTon INSTANCE = new SingleTon();
     }
     
      public static SingleTon getInstance(){
        return SingleTonHoler.INSTANCE;
      }
    }

如果是面试:

静态内部类:没有线程安全问题,在初始化类的时候加载。并且不影响启动时间。

懒汉式:有线程安全问题

饿汉式:以时间换空间,延长了启动时间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值