单例模式的简单实现与两种实现方法的比较(饿汉式和懒汉式)(二)

8 篇文章 0 订阅
5 篇文章 0 订阅

单例模式的简单实现与两种实现方法的比较(饿汉式和懒汉式)(一)


饿汉式与懒汉式是单例模式的两种不同的写法,究竟使用哪个更为方便和安全呢?

首先我们已经知道饿汉式是在外部类访问该对象前,该对象就已经存在了,而懒汉式是等到有外部类访问时才创建对象的。

我们可能会以为使用懒汉式较为方便且安全,因为外部类访问时才创建对象,不访问就不创建对象。可是问题也来了:

先看一下懒汉式的实现方法:










我们都知道cpu在处理多个程序时,在非常短的时间内来回切换着执行各个程序的,所以当一个外部类A访问getInstance()方法时有可能会被cpu暂时终止执行,而改去执行其他的程序,如果cpu 在程序A访问到第39行“if(single == null)"时终止执行,而改去执行B程序,而刚好B程序也在访问getInstance()方法,那么程序B在访问时必定创建一个Single对象,而此时cpu再改去执行A程序,A程序也会创建一个Single对象,这时就会出现了错误。

有错误就得解决啊,那该如何解决呢?

这里使用java多线程中的关键字synchronized,因为当使用它来修饰一个方法或者一个代码块的时候,能够保证在同一时刻只有一个线程访问该程序。

代码如下:


这样当多程序执行时,也就不存在安全的问题了,只是这时,如果这样使用该懒汉式就会使代码变得繁琐起来,而饿汉式是既方便又安全的单例模式实现方法。所以原则上是建议使用饿汉式单例模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值