单例模式

最近复习准备面试,感觉真的是查缺补漏啊。

下面看一下单例模式,基本思想就是将构造器修饰符改为private,然后用一个public方法去得到类实例。

  • 双重锁定单例模式:
public class Singleton {
    private Singleton(){}

    private static Singleton instance;

    private static Object obj = new Object();

    public static Singleton getInstance() {
        if (instance==null){//先判断实例是否存在,不存在加锁
            synchronized (obj) {
                if (instance == null){//如果两个线程的instance都为null,都会进入第一个if,
                    instance = new Singleton();//这时候一个线程加锁,另一个线程等待释放锁,然后new了一个实例,这时候又两个实例,所以要判断两次null
                }
            }
        }
        return instance;
    }
}

  • 内部类单例模式
public class Singleton {
    private static class SingletonHolder{
        private static final Singleton instance = new Singleton();
    }
    private Singleton(){}
    public static final Singleton getInstance(){
        return SingletonHolder.instance;
    }
}
posted @ 2018-05-04 12:33  binryang  阅读(74)  评论(0编辑  收藏  举报