F_G

许多问题需要说清楚就可以&&走永远比跑来的重要

导航

[设计模式] 单例模式

 一、不使用锁的单例模式

public class Singleton{

  private Singleton singleton = new Singleton();

  private Singleton(){}

  public Singleton getInstance(){

    return singleton;

  }

}

这样可以保持只有一个实例,这在某些情况下是合理的,比如某一个多线程的软件,整个软件只需要一个配置文件,所以只需要一个管理配置的类的实例即可

 

二、上面的单例实现实际上在实际当中会出现问题,比如如果这样的单例类在系统当中非常多,那么会造成在加载的时候系统启动非常慢,但是有的单例根部不会用,所以使用静态类的方式不是非常合理的,可以在使用的时候在进行对象的创建,也就是延迟加载。

public class Singleton{

  private Singleton singleton = null;

  private Singleton(){}

  public Singleton synchronized getInstance(){

    if(singleton == null){

      singleton = new Singleton();

    }

    return singleton;

  }

}

三、

双重枷锁方式,可以在一定程度上减少加锁带来的性能的下降!

 

public class Singleton{

  private Singleton singleton = null;

  private Singleton(){}

  public Singleton synchronized getInstance(){

    if(singleton == null){

      synchronized(){

        if(singleton==null) singleton = new Singleton();

      }

    }

    return singleton;

  }

}

[1] http://www.cnblogs.com/xudong-bupt/p/3433643.html

posted on 2015-09-09 16:48  F_G  阅读(228)  评论(0编辑  收藏  举报