模式设计的秘密之单例模式。

前言:在我们的实际应用中,经常会出现整个应用中有且只有一个,比如工具类。连接池,日志,缓存等等。这个时候经常就会考虑用单例设计模式来解决问题。

一.饿汉式单例模式

public class SingleTon{
   //私有的构造方法,保证外界不能够创建对象
    private SingleTon(){}
   //自己创建一个对象,供外界调用
    private static SingleTon instance=new SingleTon();
   //给外界提供一个获取对象的接口
    public static SingleTon getInstance(){
      return instance;
   }
}

二.懒汉式单例模式

public class SingleTon{
   //私有的构造方法,保证外界不能够创建对象
    private SingleTon(){}
   //自己创建一个对象,共外界调用
   private static SingleTon instance;
   //给外界提供一个获取对象的接口
   public static SingleTon getInstance(){
     if(instance==null){
        instance=new SingleTon();
     }
     return instance;
  }
}

区别:饿汉式单例模式在类加载的时候速度比较慢,运行的时候速度较快,而且是线程安全的。

            懒汉式单例模式在类加载的速度比较快,运行的时候速度较慢,但是线程是不安全的。

三.线程安全的,性能低一点的懒汉式单例模式

public class SingleTon{
   //私有的构造方法,保证外界不能够创建对象
    private SingleTon(){}
   //自己创建一个对象,共外界调用
   private static SingleTon instance;
   //给外界提供一个获取对象的接口,但是是线程安全的,一次只有一个线程走进去
   public static <span style="color:#33ff33;">synchronized</span> SingleTon getInstance(){
     if(instance==null){
        instance=new SingleTon();
     }
     return instance;
  }
}

四.线程安全带的,性能较高的懒汉式单例模式

public class SingleTon{
   //私有的构造方法,保证外界不能够创建对象
    private SingleTon(){}
   //自己创建一个对象,共外界调用
   private static SingleTon instance;
   //给外界提供一个获取对象的接口
   public static SingleTon getInstance(){
     if(instance==null){
     //(1)这里可能有另外一个线程进来,所以要同步
     <span style="BACKGROUND-COLOR: #33ff33">synchronized(</span><span style="BACKGROUND-COLOR: #f0f0f0"><span style="color:#cc66cc;">SingleTon.class</span><span style="color:#000000;">)</span></span>
     //(2)当执行到(1)的时候,当前线程还没有获得锁,而另外一个线程获得锁进来并创建了一个对象,如果我不在同步锁里面再次判断是否为空的话,获得的就不是同一个对象了。
        if(<span style="color:#33ff33;">instance==null</span>){
           instance=new SingleTon();
        }
     }
     }
     return instance; 
   }




 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值