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

懒汉单例模式

	//懒汉模式实现单例
	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;
	    }
	}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值