五种单例模式

  1. 饿汉式(线程安全,调用率高,但是,不能延迟加载。)
 public class Singleton{
            private static Singleton singleton = new Singleton ();
            private Singleton (){}
            public static Singleton getInstance(){return singletion;}
       } 

  1. 懒汉式(线程安全,调用效率不高,可以延时加载。)
 public class Singleton{
            private static Singleton singleton = null;
            public static synchronized synchronized getInstance(){
                 if(singleton==null){
                     singleton = new Singleton();
                 }
                return singleton;
            }
       } 

  1. 双重检测锁式(由于JVM底层内部模型原因,偶尔会出问题,不建议使用)
public class Singleton {
    private volatile static Singleton singleton;

    private Singleton() {
    }

    public Singleton getInstance() {
        if (null == singleton) {
            synchronized (Singleton.class) {
                if (null == singleton) {
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }
}
  1. 静态内部类式(线程安全,调用效率高。但是,可以延时加载)
public class StaticInnerClassSingleton {

    private static class InnerClass {
        private static StaticInnerClassSingleton staticInnerClassSingleton = new StaticInnerClassSingleton();
    }
    public static StaticInnerClassSingleton getInstance(){
        return InnerClass.staticInnerClassSingleton;
    }
}
  1. 枚举式(线程安全,调用率高,不能延时加载)
public class EnumSingleton {
    
    private EnumSingleton() {
    }
    
    private enum Singleton{
    	INSTANCE;
    	
    	private final EnumSingleton instance;

    	Singleton(){
			instance=new EnumSingleton();
		}
		public EnumSingleton getInstance() {
			return instance;
		}
    }

    public static EnumSingleton getInstance() {
        return EnumSingleton.INSTANCE.getInstance();
    }
}

如何选择

  1. 单例对象占用资源少的话,且不需要延时加载,枚举式优于饿汉式
  2. 单例对象占用资源大且需要延时加载,静态内部类式优于懒汉式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值