java编程题:编写一个单例模式

/**
 * java编程题:编写一个单例模式 
 */
public class Singleton {

	/*
	//1. 饿汉式,饿汉式,线程安全 但效率比较低 。。。一上来就new对象,真够饿的
	private Singleton(){}
	
	private static final Singleton Singleton = new Singleton();
	
	public static Singleton getInstance(){
		return Singleton;
	}
	*/
	
	/*
	//2. 懒汉式,非线程安全 。。。等老板来叫了,才去做事,小子真懒
	private Singleton(){}
	
	private static Singleton Singleton = null;
	
	public static Singleton getInstance(){
		if(Singleton==null){
			Singleton = new Singleton();
		}
		return Singleton;
	}
	*/
	
	/*
	//3. 懒汉式,线程安全,但效率很低 。。。99%情况下不需要同步
	private Singleton(){}
	
	private static Singleton Singleton = null;
	
	public static synchronized Singleton getInstance(){	//方法上加synchronized同步
		if(Singleton==null){
			Singleton = new Singleton();
		}
		return Singleton;
	}
	*/	
	
	/*
	//4. 双重校验锁
	private Singleton(){}
	
	//JDK5以后,为避免双重检查锁存在的问题,加入了volatile,是保证变量修改的可见性
	private static volatile Singleton Singleton = null;
	
	public static Singleton getInstance(){
		if(Singleton==null){
			synchronized(Singleton.class){		//加synchronized关键字同步
				if(Singleton==null){
					Singleton = new Singleton();
				}
			}
		}
		return Singleton;
	}
	
	*/
	
	/*
	//5. 静态内部类
	private Singleton(){}
	
	private static class SingletonHolder {
		private static final Singleton singleton = new Singleton();
	}
	
	public static final Singleton getInstance(){
		return SingletonHolder.singleton;
	}
	*/
	
	//6. 枚举
	private static enum EnumSingleton{
        INSTANCE;
		
        private Singleton singleton;
        
        //JVM会保证此方法绝对只调用一次
        private EnumSingleton(){
            singleton = new Singleton();
        }
        
        public Singleton getInstance(){
            return singleton;
        }
    }
	
}


参考:
http://cantellow.iteye.com/blog/838473
http://www.cnblogs.com/yinxiaoqiexuxing/p/5605338.html
http://blog.csdn.net/zhanlanmg/article/details/49944991




你可能感兴趣的:(Java编程算法)