单例设计模式之饿汉式和懒汉式

一、单例设计模式

主要思想:
简而言之就是该类在内存中只能存在一个实例化对象,也就是说其他类不能创建该类的实例化对象。

二、饿汉式单例设计模式

实例化对象随着类的加载而加载,即使该对象未被使用也会被创建
代码实现:

public class eagerSingleDesignTest {	
	//构造私有
	private eagerSingleDesignTest() {}
	//创建私有静态实例化对象
	private static eagerSingleDesignTest asdTest=new eagerSingleDesignTest();
	//创建静态方法获取实例化对象
	public static eagerSingleDesignTest getEagerSingleDesignTest() {
		return asdTest;
	}
}

三、懒汉式单例设计模式

只有当需要实例化对象的时候才会去创建
代码实现(线程不安全):

public class lazySingleDesignTest {
	//私有构造
	private lazySingleDesignTest() {}
	//创建对象
	private static lazySingleDesignTest lsdTest=null;
	//静态方法获取对象
	public static lazySingleDesignTest getlLazySingleDesignTest() {
		//判断对象是否已经存在
		if(lsdTest==null) {
			lsdTest=new lazySingleDesignTest();
		}
		return lsdTest;
		
	}
}

线程安全(同步方法实现):

public class lazySingleDesignTest {
	//私有构造
	private lazySingleDesignTest() {}
	//创建对象
	private static lazySingleDesignTest lsdTest=null;
	//静态方法获取对象,同步方法保证线程安全
	public static synchronized lazySingleDesignTest getlLazySingleDesignTest() {
		//判断对象是否已经存在
		if(lsdTest==null) {
			lsdTest=new lazySingleDesignTest();
		}
		return lsdTest;
	}
}

线程安全(同步代码块实现):

public class lazySingleDesignTest {
	//私有构造
	private lazySingleDesignTest() {}
	//创建对象
	private static lazySingleDesignTest lsdTest=null;
	//静态方法获取对象
	public static lazySingleDesignTest getlLazySingleDesignTest() {
		//外面嵌套一个if判断可以提高代码的效率,当lsdTest不为空的时候直接就返回lsdTest了
		if(lsdTest==null){
		//同步代码块保证线程安全
			synchronized(lazySingleDesignTest.class){
				//判断对象是否已经存在
				if(lsdTest==null) {
					lsdTest=new lazySingleDesignTest();
				}
			}
		}
		return lsdTest;
	}
}

四、总结

单例模式的懒汉式和饿汉式实现就是这样啦,相比较下饿汉式在开发中的使用较多,但是懒汉式又有可能在面试中被问到,懒汉式的实现涉及到了线程安全问题,所以这两种实现方式我们都要会。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值