首页  

单例模式几种实现方式     所属分类 java 浏览量 178
恶汉 懒汉 模式
懒加载 延迟加载 (lazy loading) 

单例模式特点
构造函数私有
仅有一个实例
全局访问点 

几种实现方式

静态初始化

public class SingleInstance {
	
	private static final SingleInstance INSTANCE = new SingleInstance();
	
	private SingleInstance(){}
	
	public static SingleInstance getInstance(){
		return INSTANCE;
	}
	
}


synchronized + volatile + double check + 延迟加载

public class SingleInstance2 {
	
	private static volatile SingleInstance2 instance = null;
	
	private SingleInstance2(){}
	
	public static SingleInstance2 getInstance(){
		if(instance!=null){
			return instance;
		}
		return getInstanceInternal();
	}
	
	private static synchronized SingleInstance2 getInstanceInternal(){
		if(instance!=null){
			return instance;
		}
		SingleInstance2 instanceTmp = new SingleInstance2();
		instance = instanceTmp;
		return  instance;	
	}
}

内部静态类 + 延迟加载

public class SingleInstance3 {
	
	private static class Holder{
		private static final SingleInstance3 INSTANCE = new SingleInstance3();
	}
	
	private SingleInstance3(){}
	
	public static SingleInstance3 getInstance(){
		return Holder.INSTANCE;
	}
	
}

枚举实现

public enum SingleInstance4 {
	
	INSTANCE;
	
	public void doSomething(){
		
	}
	
}


完整代码
https://gitee.com/dyyx/hellocode/tree/master/src/action/single

上一篇     下一篇
java8 ConcurrentHashMap 锁机制

两个线程,一个输出字母,一个输出数字,交替输出1A2B3C4D5E6F

java面试题合集

Mybatis工作原理简介

springboot集成mybatis

spring-boot-starter原理