单例模式

1.单例模式作用:简化复杂环境下的配置管理

  多线程中小心使用:可能会造成创建两个对象。(可以加互斥锁解决)

2.懒汉模式

第一次被引用时才将自己实例化,称为懒汉模式

(1)普通单例模式:

public Singleton{
      private static Singleton instance=null;
      /**封堵外界调用**/
      private Singleton(){
      }
      public static Singleton getInstance (){
          if(instance==null){
              instance=new Singleton();
          }
          return instance;
      }
}

  (2)多线程下单例模式:

public Singleton{
      private static volatile Singleton instance=null;
      /**封堵外界调用**/
      private Singleton(){
      }
      public static Singleton getInstance (){
          if(instance==null){
              synchronized(Singleton.class){
                  /**double-check locking**/
                  if(instance==null){
                      instance=new Singleton();
                  }
              }
          }
          return instance;
      }
}

这个链接讨论了double-check locking 失效的情况

http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html

3.饿汉模式

类加载时便实例化,称为饿汉模式。

public Singleton{
      private final static Singleton instance=new Singleton();
      /**封堵外界调用**/
      private Singleton(){
      }
      public static Singleton getInstance (){
          return instance;
      }
}

 


 

posted @ 2012-10-30 10:35  梅子毅  阅读(127)  评论(0编辑  收藏  举报