单例模式

public class Singleton {   
    /**  
     * 类级的内部类,也就是静态的成员式内部类,该内部类的实例与外部类的实例  
     * 没有绑定关系,而且只有被调用到才会装载,从而实现了延迟加载  
     */  
    private static class SingletonHolder{   
        /**  
         * 静态初始化器,由JVM来保证线程安全  
         */  
        private static Singleton instance = new Singleton();   
    }   
    /**  
     * 私有化构造方法  
     */  
    private Singleton(){   
    }   
    public static  Singleton getInstance(){   
        return SingletonHolder.instance;   
    }   


高人写的



如果用第三种,建议声明为final的,因为我们没有理由不将其声明为final的。另外,关于双重锁定,建议你看看EhCache的源代码里的CacheManager类,new了新的实力后,应该在synchronized块内return,其余一致,包括将实例声明为原子的。
附EhCache项目CacheManager部分源代码:



Java代码   收藏代码
  1. public static CacheManager create() throws CacheException {  
  2.     if (singleton != null) {  
  3.         return singleton;  
  4.     }  
  5.     synchronized (CacheManager.class) {  
  6.         if (singleton == null) {  
  7.             LOG.debug("Creating new CacheManager with default config");  
  8.             singleton = new CacheManager();  
  9.         } else {  
  10.             LOG.debug("Attempting to create an existing singleton. Existing singleton returned.");  
  11.         }  
  12.         return singleton; // 这里是在synchronized块内返回的,而你的例子不是  
  13.     }  
  14. }  


原文:http://cantellow.iteye.com/blog/838473#comments

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值