单例模式(小小单例,一点也不小)

小小单例,一点也不小。今天终于发现了原来单例模式还有这么多道道~~

***单例模式解决了两个基本问题:全局访问和实例化控制

出自:大话设计模式

懒汉式单例模式:

定义:要在第一次被引用时,才会将自己实例化,所以就被称为懒汉式单例模式,也就是我们常用的单例模式。

一般常用示例:

单重锁定示例: 缺点:每次调用GetInstance方法时都需要lock,影响性能

双重锁定示例:

 

为什么要判断两次?

  对于instance存在的情况,就直接返回,这没有问题。当instance为null并且同时有两个线程调用GetInstance()方法时,它们将都可以通过第一重instance==null的判断。然后由于lock机制,这两个线程则只有一个进入,另一个在外排队等候,必须要其中一个进入并出来后,另一个才能进入。而此时如果没有了第二次的instance是否为null判断,则第一个线程创建了实例,而第二个线程还是可以继续再创建新的实例。

 

饿汉式单例模式:

定义:由于静态初始化的方式是在自己被加载时就将自己实例化,所以被形象的称为饿汉式单例模式。

示例:

懒汉式和饿汉式区别:

由于饿汉式,即静态初始化的方式,它是类一加载就实例化的对象,所以要提前占用系统资源。然而懒汉式,又会面临着线程访问的安全性问题,需要做双重锁定这样的处理才可以保证安全。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值