单例模式要要点就是一个类只会存在一个实例,要想达到这种效果,最重要的就是将构造方法设置为私有,然后通过static的方法来获取对象。
上述设计并不线程安全,因为在lazySingleton = new LazySingletion()
这一步可能会发送线程的切换,导致出现多个lazySingletion对象。
可以通过多线程Debug来测试。
线程类:
测试类:
在多线程Debug时需要在断点处勾选Thread
。
之后开始Debug。
开始时创建了两个LazyThread线程对象。
可以看到目前有三个进程,Main
,Thread-0
,Thread-1
。
我们切换至Thread-0
将此线程执行到LazySingleton对象创建处。
此时lazySingleton还没有实例化,为null,所以Thread-1
也可以通过if判断进入其中。我们将Thread-1
线程也执行至此处。
接下来的顺序就无所谓了,两个线程都会去自己实例化lazySingleton对象。
执行完成后通过打印发现lazySingleton对象其实不是同一个。
如果我们正常运行呢?
可以发现大部分情况下都会时同一个lazySingleton对象。
为了保证线程安全性,可以通过synchronized
来修饰getInstance方法。
至于这种情况下的调试,在Thread-0
进入synchronized
块中时,切换至Thread-1
会发现无法进入。
文章转载自肥宅与画家,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
数据库国产化替代深化:DBA的机遇与挑战
代晓磊
1209次阅读
2025-04-27 16:53:22
2025年4月国产数据库中标情况一览:4个千万元级项目,GaussDB与OceanBase大放异彩!
通讯员
689次阅读
2025-04-30 15:24:06
数据库,没有关税却有壁垒
多明戈教你玩狼人杀
587次阅读
2025-04-11 09:38:42
国产数据库需要扩大场景覆盖面才能在竞争中更有优势
白鳝的洞穴
569次阅读
2025-04-14 09:40:20
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
493次阅读
2025-04-17 17:02:24
一页概览:Oracle GoldenGate
甲骨文云技术
469次阅读
2025-04-30 12:17:56
GoldenDB数据库v7.2焕新发布,助力全行业数据库平滑替代
GoldenDB分布式数据库
461次阅读
2025-04-30 12:17:50
优炫数据库成功入围新疆维吾尔自治区行政事业单位数据库2025年框架协议采购!
优炫软件
353次阅读
2025-04-18 10:01:22
国产数据库图谱又上新|82篇精选内容全览达梦数据库
墨天轮编辑部
267次阅读
2025-04-23 12:04:21
关于征集数据库标准体系更新意见和数据库标准化需求的通知
数据库标准工作组
239次阅读
2025-04-11 11:30:08