Fork me on GitHub

# 单例模式

单例模式

方式七种

其中

饿汉 –> 饿汉变种--> 静态内部类

懒汉 线程不安全 --> 懒汉 线程安全–> 双重校验锁

枚举法 网上最推荐的。stackoverflow 上点赞最多的….因为双重校验锁有反射存在的问题

关键单词

instance

enum

synchronized

应该先从饿汉模式开始看, 线程安全。

饿汉 ,

// #饿汉 
public class Singleton{
	private  static Singleton instance=new Singleton();
	private Singleton(){}
	public static Singleton getInstance(){
		return instance;
	}
}

这两种没什么区别,只不过放在了 静态块

//# 饿汉变种
public class Singleton{
	private Singleton instance=null;
	static{
		instance=new Singleton();
	}
	private Singleton(){}
	public static Singleton getInstance(){
		return this.instance;
	}
}

内部静态类

//【推荐】5 静态内部类,前两种是只要singleton 被装载,那么instance就被实例化
// 而这种方法使用调用getInstance 才会被装载,从而实例化instance。
//目的,实例化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;
	}
}

饿汉式

// #懒汉 线程不安全
public class Singleton{

	private static Singleton instance;
	private Singleton(){}

	public static Singleton getInstance{
		if(instance == null){
			instance=new Singleton();
		}
		return instance;
	}
}
// #懒汉 线程 安全  效率低

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

//【推荐】 双重校验锁
public class Singleton{
	private static Singleton instance=null;
	private Singleton(){}
	public static final Singleton getInstance(){
		if(instance==null)
		{
			synchronized(Singleton.class)
			{
				if(Singleton==null)
					instance=new Singleton();
			}
		}
	}
}

//双重校验锁仍然是有缺点的,极力推荐 enum法
//https://www.jianshu.com/p/1f856daa39c7

枚举

//【推荐】6 、  大神 枚举法 !!!  可以避免 多线程同步问题,还能防止反序列化重新创建对象
public enum Singleton{
	INSTANCE;
	public void whaterverMethod(){
	}
}
//因为JVM会保证enum不能被反射并且构造器方法只执行一次。
//https://837062099.iteye.com/blog/1454934
//枚举的本质 是枚举 对象! ,http://c.biancheng.net/view/1100.html

//https://www.cnblogs.com/alter888/p/9163612.html
//枚举实现原理 , 会生成相关的类,集成
posted @ 2019-07-17 15:36  EsMussSeinHui  阅读(109)  评论(0编辑  收藏  举报