单例模式的理解

单例模式主要有两种

  懒汉式

  饿汉式

 

//基于懒汉式设计的一个单例模式,线程并不安全

public class Singleton {

  private staitc Singleton uniqueInstance = null;

  private Singleton() { }

  public static Singleton getInstance() {

    if (uniqueInstance == null) {

      uniqueInstance = new Singleton();        

    }

    return uniqueInstance;

  }

//如果需要线程安全就要加上同步锁,不过这种写法导致每一次都要进行同步,消耗资源

public class Singleton {

  private staitc Singleton uniqueInstance = null;

  private Singleton() { }

  synchronized public static Singleton  getInstance() {

    if (uniqueInstance == null) {

      uniqueInstance = new Singleton();        

    }

    return uniqueInstance;

  }

}

 

//有一种方式叫双重加锁检查方式,不过这种方式需要使用一个关键字

public class Singleton {

  private volatile staitc Singleton uniqueInstance = null;

  private Singleton() { }

  public static Singleton  getInstance() {

    synchronized(Singleton.class) {

      if (uniqueInstance == null)  {

        synchronized(Singletion.class) {

            if (uniqueInstance == null) {

            uniqueInstance = new Singleton();

          }

         }

      }

      return uniqueInstance;

    } 

  }    

}

//下面介绍一下饿汉式的写法,这种方式本身就是线程安全的

public class Singleton {

  private static Singleton uniqueInstance = new Singleton();

  private Singleton() { }

  public static Singleton getInstance() {

    return uniqueInstance;

  }

}

 

下面谈一谈个人对这两种方式的理解

懒汉式就是一种延迟加载的意思,需要时被加载,配上缓存池使用效果就更加了,但是线程安全比较繁琐

饿汉式本身是线程安全的,在应用启动时被加载

如何选择呢?如果是系统资源,并且是配置化资源,最好在应用启动时就加载,这样应用可能启动会比较慢,但是,一旦启动就不会再影响性能了,而对应按需加载的则使用懒汉式,并配合缓存池进行设计

 

posted on 2015-12-08 22:10  zhaojunyang  阅读(239)  评论(0)    收藏  举报

导航