Java中单例七种写法(懒汉、恶汉、静态内部类、双重检验锁、枚举)

/***
 * 懒汉模式 1
 * 可以延迟加载,但线程不安全。
 * @author admin
 *
 */
public class TestSinleton1 {
	private static  TestSinleton1 sinleton;
	private TestSinleton1(){
		
	}
	public static  TestSinleton1 getSinleton(){
		if(sinleton==null){
			return new TestSinleton1();
		}
		return sinleton;
	}
}
/***
 * 懒汉模式变种 2
 * @author admin
 * 使用了synchronized关键字,既可以延迟加载,又线程安全,但是执行效率低。
 */
class TestSinleton2{
	private static  TestSinleton2 sinleton;
	private TestSinleton2(){
		
	}
	public  synchronized static  TestSinleton2 getSinleton(){
		if(sinleton==null){
			return new TestSinleton2();
		}
		return sinleton;
	}
}
/***
 * 饿汉模式 3
 * @author admin
 * 基于classload机制,静态变量在类装载时进行初始化
 * 可以避免线程安全问题,但是没有延迟加载。
 */
class TestSinleton3{
	private static  TestSinleton3 sinleton = new TestSinleton3();
	private TestSinleton3(){
	}
	public static TestSinleton3 getSinleton(){
		return sinleton;
	}
}
/***
 * 恶汉变种模式 4
 * @author admin
 * 基于静态 代码块,在实例化或者第一次调用时执行
 * 既可以延迟加载,又线程安全
 */
class TestSinleton4{
	private static  TestSinleton4 sinleton =null;
	static{
		sinleton = new TestSinleton4();
	}
	public static TestSinleton4 getSinleton(){
		return sinleton;
	}
}
/***
 * 双重校验锁 5
 * @author admin
 * 懒汉模式的优化版,拥有线程安全、高效率以及延迟加载等特性。但是这种方式需要jdk1.5以上,且在一些平台和编译器下有错。
 */
class TestSinleton5{
	private static volatile TestSinleton5 sinleton;
	private TestSinleton5(){
		
	}
	public static TestSinleton5 getSinleton(){
		if(sinleton==null){
			synchronized (TestSinleton5.class) {
				if(sinleton==null){
					
					sinleton = new  TestSinleton5();
				}
			}
		}
		return sinleton;
	}
}
/***
 * 静态内部类 6
 * @author admin
 * 恶汉模式的优化版,在类被装载时,静态内部类并没有被实例化,
 * 只有getInstance()时才 会装载 SingletonHolder 类,静态内部类方式也能很好地,实现线程安全、高效率和延迟加载特性。
 */
class TestSinleton6{
	private static class SingletonHolder {
		private static final TestSinleton6 sinleton = new TestSinleton6();
	}
	private TestSinleton6(){}
	public static final TestSinleton6 getSinleton(){
		return SingletonHolder.sinleton;
	}
	
}
/***
 * 枚举7
 * @author admin
 *避免多线程同步问题
 */
enum TestSinleton7 {
	SINLETON;
}

  

posted @ 2016-09-14 14:18  justin_xiaoshuai  阅读(1686)  评论(0编辑  收藏  举报