首页 > 其他 > 详细

单例模式的理解

时间:2015-12-09 00:01:50      阅读:254      评论:0      收藏:0      [点我收藏+]

单例模式主要有两种

  懒汉式

  饿汉式

 

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

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;

  }

}

 

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

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

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

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

 

单例模式的理解

原文:http://www.cnblogs.com/zhaojunyang/p/5031233.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!