单例模式

单例模式 的应用场景是: 有的时候只需要在内存中保有该类的一份实例,如资源配置类。

 

 

单例模式要求:

1. 单例类 只有一个 实例

2.构造方法是私有的,这样的话,外部无法new出一个实例

3.单例类必须提供一个别人得到实例的静态方法

4.必须解决多线程下的同步问题

5.分为懒汉式和饿汉式实现方式

 

一:下面先看看懒汉式的实现方法,何为懒汉,就是自己不先主动生成一个实例,而是等到用户使用的时候来判断,判断如果实例还为空,那么就new一个。

 

public class Singleton(){

   public  static Singleton  s = null;

 

  private Singleton(){//构造方法必须为私有,这样外部无法new出实例

  }

 

//提供一个外部获取实例的静态方法,必须为静态的,因为外部new 不出对象,只能通过类来直接调用静态方法。

   public static synchronized Singleton getInstance(){

       if(s == null){

               s = new Singleton();

       }

        return s;

}

}

//synchronize 必须添加。因为懒汉式就是存在多线程的同步问题,我们来看一种情况

   比如  某线程调用 getInstance方法的时候,还没来得及判断你,另外一个线程就进来了,此时2个线程都认为实例为Null,于是各自去new各自的实例,最终就不是单例了

 

二:饿汉式就比较直接了。何为饿汉,就是很饿,一进来就找实例,自己直接动手new了。不用等到实际需要的时候才去new

      public class Singleton(){

      private   static final  Singleton s = new Singleton();

     private Singleton();

 

     public static Singleton getInstance(){

        return s;

   }

 

}

 

}

 

 

饿汉和懒汉的最大区别就是 一个线程安全,一个线程不安全。

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值