多线程编程与艺术之单例模式

懒汉单例模式

	//懒汉模式实现单例
	public class SingleTon_Lazy {
	    //单例延迟实例化
	    private SingleTon_Lazy singleTon_lazy;
	    //无参构造函数私有化,禁止使用new进行实例化
	    private SingleTon_Lazy(){}  
	    //静态方法公有化,获取单例
	    public SingleTon_Lazy getSingleTon_lazy(){
	        if(singleTon_lazy == null)//1
	            singleTon_lazy = new SingleTon_Lazy();//2
	        return singleTon_lazy;
	    }
	}

懒汉单例模式(线程安全版)

	//懒汉模式实现单例
	public class SingleTon_Lazy {
	    //单例延迟实例化
	    private SingleTon_Lazy singleTon_lazy;
	    //无参构造函数私有化,禁止使用new进行实例化
	    private SingleTon_Lazy(){}  
	    //静态方法公有化,获取单例,synchronized加锁同步
	    public synchronized SingleTon_Lazy getSingleTon_lazy(){
	        if(singleTon_lazy == null)//1
	            singleTon_lazy = new SingleTon_Lazy();//2
	        return singleTon_lazy;
	    }
	}

双重检查锁定(DCL)单例模式(非线程安全版)

	//线程不安全的DCL单例模式
	public class SingleTon_DCL {
	    //单例延迟初始化
	    private SingleTon_DCL singleTon_dcl;
	    //构造函数私有化,禁止程序通过new创建实例
	    private SingleTon_DCL(){}
	    //静态方法公有化,用于获取单例
	    public SingleTon_DCL getSingleTon_dcl(){
	        //第一次判断单例是否实例化
	        if(singleTon_dcl == null){
	            //加锁
	            synchronized(SingleTon_DCL.class){
	                //第二次判断
	                if(singleTon_dcl == null){
	                    singleTon_dcl = new SingleTon_DCL();//a
	                }
	            }
	        }
	        return singleTon_dcl;
	    }
	}

双重检查锁定(DCL)单例模式(线程安全版)

	//线程安全的DCL单例模式(基于volatile解决方案)
	public class SingleTon_DCL {
	    //单例延迟初始化,volatile关键字修饰保证多线程可见性,以及禁止实例化过程重排序
	    private volatile SingleTon_DCL singleTon_dcl;
	    //构造函数私有化,禁止程序通过new创建实例
	    private SingleTon_DCL(){}
	    //静态方法公有化,用于获取单例
	    public SingleTon_DCL getSingleTon_dcl(){
	        //第一次判断单例是否实例化
	        if(singleTon_dcl == null){
	            //加锁
	            synchronized(SingleTon_DCL.class){
	                //第二次判断
	                if(singleTon_dcl == null){
	                    singleTon_dcl = new SingleTon_DCL();//a
	                }
	            }
	        }
	        return singleTon_dcl;
	    }
	}

饿汉模式(线程安全版)

	//饿汉单例模式
	public class SingleTon_Hungry {
	    //类初始化时,开始单例实例化
	    private SingleTon_Hungry singleTon_hungry = new SingleTon_Hungry();
	    //无参构造函数私有化,避免程序中通过new实例化对象
	    private SingleTon_Hungry(){}
	    //静态方法公有化,用于获取单例
	    public SingleTon_Hungry getSingleTon_hungry(){
	        return singleTon_hungry;
	    }
	}

你可能感兴趣的:(Java设计模式,Java多线程)