不见不散

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

什么是单例模式:

确保一个类最多只有一个实例.

单例模式是最简的一种模式比较好理解.

单例模式在多线程中的问题解决办法.

1,在getInstance()方法上加 synchronization关键字.

    这种做法有一个缺点,如果这个单例类在程序的使用的次数非常多.也就是调用getInstance()这个方法的次数很多.因为步同是很耗资源的.每次调用getInstance()方法都要做一次同步.很耗费资源.

2,为了解决上面的问题于是大家想到进一步的方法.就是在单例类自己先静态初始好,自己先只初始化一次,然后给getInstance()方法调用返回,这样调用每次调用getInstance()这个方法得到单例对象时就不用同步了.静态初始化的时候可以加final

     这种做法也有一个缺点,如果这个单例类在程序加载的时候就要先初始化好.

3,还是为了解决上面的问题,有了时一步的方法.你在想想我们想要单例只是希望初始化的时候只初始化一次所以要加同步,并不是每一次得到这个这个单例类的时候都要同步.所以最终的解决办法是.

双重检查加锁法的代码:

public class Singleton {    
    
    private static volatile Singleton instance=null;
    //直接静态初始化,这样getInstance()方法了可以不用加synchronized.
    //private final static Singleton = new Singleton();
    
    //私有构造方法
    private Singleton(){};
    
    public static Singleton getInstance(){
        //只在初始化的时候才同步,初始过了,在调用这个方法就只返回实例不在进行同步了.
        if(instance==null){
            synchronized (Singleton.class) {
                if(instance==null){
                    instance = new Singleton();
                }
            }            
        }
        return instance;
    }
}
posted on 2016-03-12 16:43  不见不散789  阅读(175)  评论(0编辑  收藏  举报