设计模式中的单例模式

单例模式有两种实现模式:饿汉模式和懒汉模式

饿汉模式

第一步:创建类的唯一实例,并且用private static修饰

第二步:把构造方法私有化,防止外界直接用new创建实例

第三步:提供一个用public static修饰的getIntence()方法,来获取这个唯一的实例

下面举一个例子

懒汉模式

第一步:声明类的的一个对象,并且用private static修饰

第二步:把构造方法私有化,防止外界直接用new创建实例

第三步:提供一个用public static修饰的getIntence()方法,来获取这个唯一的实例

注意:上图所示的代码在在单线程中能够正确执行,但是在多线程应用中具有线程安全问题。

我们可以使用synchronized的同步机制来解决懒汉模式的线程安全问题,如下图所示

这样子在多个线程并发执行的时候,同一时间只有一个线程来执行getIntence()这段代码,就不会出现线程安全问题。

但是这种方法效率比较低,在多线程并发访问getIntence()的时候,每次都要判断是否下了锁,比较浪费资源,为了提高效率,

可以采用双重判断的方法,如下图所示:

注意:同步代码块用的锁是单例的字节码文件对象Singleton.class,且只能用这个锁。


比较两种实现模式,饿汉模式在加载类的时候就创建了类的实例,比较费空间,但运行的时候比较快,且它是线程安全的;

而懒汉模式,则是在运行的时候创建类的实例,运行时比较慢,且它具有线程安全问题,实现起来稍微麻烦些,在实际开发中,

要根据实际情况合理选择这两种实现模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值