Java 设计模式之:单例模式( Singleton)

1.不支持多线程:

public class Singleton {   
    //**     * 单线程  开始   
    private static Singleton instance;   
    private  Singleton(){}   
    public static Singleton getInstance(){   
        if(instance==null){   
            instance=new Singleton();   
        }   
        return instance;   
    }   
   //    **     * 单线程  结束   
}  

 

 2.支持多线程:

public class Singleton {   
   // ** * 多线程 开始   
   private static Singleton instance = null;   
   private static Object classlock = Singleton.class;   
   private Singleton() {   
   }   
   public static Singleton getInstance() {   
       synchronized (classlock) {   
           if (instance == null) {   
               instance = new Singleton();   
           }   
           return instance;   
       }   
   }   
  
   // ** * 多线程 结束   

 

简便方式:

 public class Singleton {   
    // ** * 多线程 开始   
    private static Singleton instance = null;   
    private Singleton() {   
    }   
    public static synchronized Singleton getInstance() {   
                if (instance == null) {   
                instance = new Singleton();   
            }   
            return instance;   
    }   
    // ** * 多线程 结束   
}  

 

3.饿汉式单例

public class Singleton {

  private Singleton(){}

  //在自己内部定义自己一个实例,是不是很奇怪?
  //注意这是private 只供内部调用

  private static Singleton instance = new Singleton();

  //这里提供了一个供外部访问本class的静态方法,可以直接访问  
  public static Singleton getInstance() {
    return instance;   
   } 
}

 

4.懒汉式单例

public class Singleton {

  private static Singleton instance = null;

  public static synchronized Singleton getInstance() {

  //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次   

 
  //使用时生成实例,提高了效率!
  if (instance==null)
    instance=new Singleton();
  return instance;   }

} 
 

     懒汉式单例 lazy initialization,也就是说第一次调用时初始Singleton,以后就不用再生成了。
注意到lazy initialization形式中的synchronized,这个synchronized很重要,如果没有synchronized,那么使用getInstance()是有可能得到多个Singleton实例。
一般来说第一种比较安全。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值