单例模式笔记

定义

实现

懒汉实现

设置构造方法为私有,多线程并不安全

public class SingleTon{
    private static SingleTon s=null;
    private SingleTon(){
        //初始化操作...
    }
    
    public static SingeTon getInstance(){
        if(s==null)
            s=new SingleTon();
        return s;
    }
}

饿汉实现

加载类时就初始化实例,浪费了一些内存空间

public class SingleTon{
    private static SingleTon s=new SingleTon();
    private SingleTon(){
        //初始化操作...
    }
    
    public static SingeTon getInstance(){
        //if(s==null)
        //    s=new SingleTon();
        return s;
    }
}

同步方法

没有多线程问题,但是线程挂起的消耗可能很大

public class SingleTon{
    private static SingleTon s=null;
    private SingleTon(){
        //初始化操作...
    }
    
    public static synchronized SingeTon getInstance(){
        if(s==null)
            s=new SingleTon();
        return s;
    }
}

double checking 方法

锁住整个方法可能有较大的消耗,这个实例事实上仅仅创建一次.

public class SingleTon{
    private static SingleTon s=null;
    private SingleTon(){
        //初始化操作...
    }
    
    public static  SingeTon getInstance(){
        if(s==null)
            //只有第一次创建的时候进入方法才会被锁住,其他时候不会锁住
            synchronized(SingleTon.class){
            if(s==null)
                s=new SingleTon();
        }    
        return s;
    }
}
posted @ 2020-03-10 11:57  少年留不住  阅读(134)  评论(0编辑  收藏  举报