单例模式-Java5种方式

单例模式

饿汉式

public class Singleton{
    private static Singleton instance = new Singleton();
    private Singleton(){}
    public static Singleton newInstance(){
        return instance;
    }
}

懒汉式

public class Singleton{
    private static Singleton instance = null;
    private Singleton(){}
    public static Singleton newInstance(){
        if(null == instance){
            instance = new Singleton();
        }
        return instance;
    }
}

线程安全问题,并发调用它的getInstance()创建多个实例,可加锁解决

public class Singleton{
    private static Singleton instance = null;
    private Singleton(){}
    public static synchronized Singleton newInstance(){
        if(null == instance){
            instance = new Singleton();
        }
        return instance;
    }
}

双重校验锁-懒汉式

public class Singleton {
    private static Singleton instance = null;
    private Singleton(){}
    public static Singleton getInstance() {
        if (instance == null) {//创建了就不用执行后面
            synchronized (Singleton.class) {
                if (instance == null) {//并发问题
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

静态内部类-懒汉式

public class Singleton{
    private static class SingletonHolder{
        public static Singleton instance = new Singleton();
    }
    private Singleton(){}
    public static Singleton newInstance(){
        return SingletonHolder.instance;
    }
}

利用了类加载机制来保证只创建一个instance实例

枚举

public enum Singleton{
    instance;
    public void whateverMethod(){}    
}
posted @ 2022-04-07 23:43  爆辣牛筋丸  阅读(35)  评论(0)    收藏  举报