单例模式的几种写法

2017-09-30  本文已影响0人  树深时见鹿丶

一、饿汉式

特性:立即创建 线程安全 没有延迟加载

    public class Single {
        private static Single instance=new Single();
        private Single(){}
        public static Single getInstance(){
             return instance;   
        }
   }

二、懒汉式

特性:延迟创建,线程不安全

    public class Single {
    private static Single instance;
    private Single(){}
    public static Single getInstance(){
        if(instance==null){
            instance=new Single();
        }
        return instance;    
    }
    }

三、加锁的懒汉式

特性:延迟创建 线程安全 同步情况下效率低

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

四、双重验证式懒汉式

特性:延迟创建 线程安全 同步情况下效率高

    public class Single {
    private static Single instance;
    private Single(){}
    public static Single getInstance(){
        if(instance==null){
            synchronized (Single.class) {
                if (instance==null) {
                    instance=new Single();
                }
            }
        }
        return instance;        
    }
    }

五、类加载方式

特性:延迟创建 线程安全 同步情况下效率高

    public class Single {
    private Single(){}
    private static class ClassHolder{
        private static Single instance=new Single();
    }
    public static Single getInstance(){
        return ClassHolder.instance;        
    }
    }

六、枚举方式

特性:原生防止反射和反序列化击穿

    public enum Single{
        INSTANCE;
    }
上一篇下一篇

猜你喜欢

热点阅读