《Java设计模式及实践》—2.1.2 拥有双重校验锁机制的同步锁单例模式

举报
华章计算机 发表于 2019/07/22 11:33:14 2019/07/22
【摘要】 本节书摘来自华章计算机《Java设计模式及实践》一书中的第2章,第2.1.2节,[印度] 卡马尔米特·辛格(Kamalmeet Singh)[荷兰] 艾德里安·伊恩库列斯库(Adrian Ianculescu) 著[罗马尼亚] 路西安-保罗·托尔耶(Lucian-Paul Torje) 张小坤 黄 凯 贺 涛 译.

2.1.2 拥有双重校验锁机制的同步锁单例模式

前面的实现方式能够保证线程安全,但同时带来了延迟。用来检查实例是否被创建的代码是线程同步的,也就是说此代码块在同一时刻只能被一个线程执行,但是同步锁(locking)只有在实例没被创建的情况下才起作用。如果单例实例已经被创建了,那么任何线程都能用非同步的方式获取当前的实例。

只有在单例对象未实例化的情况下,才能在synchronized代码块前添加附加条件移动线程安全锁:

 image.png

注意到instance == null条件被检查了两次,因为我们需要保证在synchronized代码块中也要进行一次检查。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200