位置: IT常识 - 正文

设计模式——单例模式(《设计模式》)

编辑:rootadmin
设计模式——单例模式 是什么?

推荐整理分享设计模式——单例模式(《设计模式》),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:《设计模式》,设计模式 单一原则,设计模式?,设计模式 单一原则,设计模式其实很简单,设计模式简单理解,设计模式单例,设计模式 单一原则,内容如对您有帮助,希望把文章链接给更多的朋友!

单例模式是Java中最简单的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式;

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建,这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象;

结构

单例模式主要有以下角色:

1.单例类:只能创建一个实例的类;

设计模式——单例模式(《设计模式》)

2.访问类:使用单例类;

实现饿汉式

类加载就会导致该单实例对象被创建;

代码实现

我们在类加载的时候就会实例化出该对象存放在内存中,不需要在使用的时候再去创建,因此不会有多个Singleton对象实例存在,当类被卸载时,该对象也会随之消亡;

public class HungrySingleton { /** * 模拟饿汉式创建单例对象 * */ private final static HungrySingleton hungrySingleton=new HungrySingleton(); public static HungrySingleton getInstance(){ return hungrySingleton; }}懒汉式

类加载不会导致该单实例对象被创建,而是首次使用该对象的时候才会创建;

代码实现

我们直接来看最终的代码,我们不仅要在使用的时候进行单例对象的实例化,还需要防止在并发的情况下重复创建;

因此我们最终使用的方案是双重判空+锁的方式来处理,这样处理的好处就在于:如果在并发的情况下,首先回去进行非空判断,不至于让所有线程一上来就直接竞争锁资源,提高了性能,其次又为了防止在加到锁之后其他线程已经完成了实例化,因此再进行判断,这样的话更加安全和保险;

/** * 模拟懒汉式创建单例对象 * */private static volatile Singleton singleton; //防止指令重排public static Singleton getInstance() { if (singleton==null){ synchronized (Singleton.class){ //加锁防止并发的情况下重复实例化对象 if (singleton!=null){ //双重判空 return singleton; }else { singleton=new Singleton(); } } } return singleton;}

对单例对象加上volatile关键字是为了防止指令重排序,因为JVM在保证最终结果正确的情况下,可以不按照程序编码的顺序执行语句,尽可能提高程序的性能,但是这样的话就有可能报空指针异常,因此我们使用volatile修饰,可以保证其指令执行的顺序与程序指明的顺序一致,不会发生顺序变化,其次使用volatile关键字修饰的变量可以保证其内存可见性,即每一时刻读取到该变量的值都是内存中最新的那个纸,线程每次操作该变量都需要读取该变量;

如下图,如果线程A发生了指令重排,没有在第二步的时候进行对象的初始化,而这个时候线程B刚好在这个时间差去使用该对象就会报NPE异常;

本文链接地址:https://www.jiuchutong.com/zhishi/299317.html 转载请保留说明!

上一篇:第十章 STM32+ESP8266接入机智云 实现小型IOT智能家居项目(第十章光结局和夜结局)

下一篇:【Node.js实战】一文带你开发博客项目之联调(导入HTML、Nginx反向代理、CORS解决跨域、与前端联调)(node.js教程详细)

  • 移动主卡怎么添加亲情号码(移动主卡怎么添加家庭网成员)

    移动主卡怎么添加亲情号码(移动主卡怎么添加家庭网成员)

  • soul怎么搜索别人的id的(soul怎么搜索别人的名字)

    soul怎么搜索别人的id的(soul怎么搜索别人的名字)

  • 360浏览器历史记录在哪(360浏览器历史记录自动删除)

    360浏览器历史记录在哪(360浏览器历史记录自动删除)

  • 华为手机怎么出厂时间(华为手机怎么出现下面的3个选择键)

    华为手机怎么出厂时间(华为手机怎么出现下面的3个选择键)

  • 微信怎样把群里的人踢出群(微信怎样把群里的语音整理成语音包)

    微信怎样把群里的人踢出群(微信怎样把群里的语音整理成语音包)

  • 华为nova7拍照模糊(华为nova7拍照模式的小文子不见了)

    华为nova7拍照模糊(华为nova7拍照模式的小文子不见了)

  • watch5防水性能(iwatch5防水性能)

    watch5防水性能(iwatch5防水性能)

  • 小米笔记本开机黑屏(小米笔记本开机密码忘记了怎么打开)

    小米笔记本开机黑屏(小米笔记本开机密码忘记了怎么打开)

  • ppt内嵌视频无法播放怎么办

    ppt内嵌视频无法播放怎么办

  • iphone11黑屏怎么办(苹果11黑屏)

    iphone11黑屏怎么办(苹果11黑屏)

  • dp线显示器黑屏无信号(dp线显示器黑屏无信号拔电源的原理)

    dp线显示器黑屏无信号(dp线显示器黑屏无信号拔电源的原理)

  • 苹果的volte是什么意思(iphone手机volte有什么用)

    苹果的volte是什么意思(iphone手机volte有什么用)

  • 拼多多可以申请几个号(拼多多可以申请补差价吗)

    拼多多可以申请几个号(拼多多可以申请补差价吗)

  • word2010删除分页符(word2010删除分页符怎么删除)

    word2010删除分页符(word2010删除分页符怎么删除)

  • 手机没电池怎么开机(手机没电池怎么测试开机)

    手机没电池怎么开机(手机没电池怎么测试开机)

  • 小米全局搜索怎么关闭(小米全局搜索怎么变透明的)

    小米全局搜索怎么关闭(小米全局搜索怎么变透明的)

  • 固定电话呼叫转移怎么设置(固定电话呼叫转移业务包括什么类型)

    固定电话呼叫转移怎么设置(固定电话呼叫转移业务包括什么类型)

  • cibn互联网电视认证失败怎么解决

    cibn互联网电视认证失败怎么解决

  • miui10查看电流(小米 查看电流)

    miui10查看电流(小米 查看电流)

  • 苹果ipod耳机和华为手机能匹配吗(苹果耳机和ipad耳机一样)

    苹果ipod耳机和华为手机能匹配吗(苹果耳机和ipad耳机一样)

  • 网易云有听歌识曲吗(网易云听歌识曲记录在哪里)

    网易云有听歌识曲吗(网易云听歌识曲记录在哪里)

  • 抖音照片和视频怎么合在一起(抖音照片和视频哪个流量更快更多)

    抖音照片和视频怎么合在一起(抖音照片和视频哪个流量更快更多)

  • QQ音乐界面模糊怎么回事(qq音乐画面)

    QQ音乐界面模糊怎么回事(qq音乐画面)

  • word分隔线在哪里设置(words分隔线)

    word分隔线在哪里设置(words分隔线)

  • Win10电脑中QQ音乐听不了是怎么回事?(电脑qq音乐声音小怎么回事)

    Win10电脑中QQ音乐听不了是怎么回事?(电脑qq音乐声音小怎么回事)

  • 超简单的DEDECMS整合百度编辑器(Ueditor)使用教程(超简单的土法自制水泥)

    超简单的DEDECMS整合百度编辑器(Ueditor)使用教程(超简单的土法自制水泥)

  • 个税退付手续费是单位所得吗
  • 免税 普票
  • 车船税在备注栏怎么报表
  • 一般纳税人广告
  • 名义股东转让股份侵权
  • 利率与股价的计算方法
  • 法人的往来款可以转为实收资本吗?
  • 跨年的预付账款如何冲销
  • 民事诉讼的适用范围具体包括哪些案件
  • 公司买手机可以开票抵扣吗
  • 西安的税务局
  • 已抵扣的发票怎么开红字发票申请单
  • 增值税普通发票几个点
  • 增值税的专用发票金额含税吗
  • 国内外经典案例
  • 外地派人来出差怎么报备
  • 企业所得税能扣除的税金
  • 存货进项税额转出会计处理
  • 城市维护建设税的计税依据是什么
  • 买车预付款怎么记账
  • 合同签订后税率调整
  • 自行研发的专利权计入
  • 商家收白条
  • 电脑图标怎么在下面显示
  • macbook版itunes
  • 个人出差借款会计分录
  • 集团公司交税怎么交?
  • php fileinfo
  • 停车缴费怎么交
  • 现金盘盈后的财务分析
  • 一次补发工资怎么算
  • 前端数据加密的三种方式
  • 创建javascript函数
  • 查看zip文件命令
  • 支付货物运费计入什么科目
  • java泛型类和泛型方法
  • 利息收入的纳税义务发生地
  • 个人所得税计算器公式
  • 预收和预付科目一样吗
  • 合理损耗应计入成本吗
  • 应付账款不用付情况说明
  • 哪些凭证可以作为原始凭证
  • 高新技术企业核心人才保险
  • 事业单位破产清算开户流程
  • 委托代销业务的会计分录
  • 固定资产报废的账务处理
  • 有留抵税额可以红冲吗
  • 商会开年会费用怎么入账
  • 公司支付质保金怎么做账
  • win7系统一键还原方法
  • win8系统手机
  • 虚拟机中安装虚拟机
  • mac trim功能
  • vpngui.exe是什么进程
  • 注册表.bak
  • KunlunPlatform.exe是什么进程?KunlunPlatform.exe是安全的程序吗?
  • macbookair直接合上
  • linux配置ssh
  • cocos lua js
  • glColor3f影响纹理贴图 的思考
  • node.js的作用是什么
  • cocos2d-js-min.js
  • JavaScript事件处理的方式(三种)
  • nodejs实战教程
  • javascript教程chm
  • php删除代码
  • js中new操作符工作原理
  • shell脚本引用文件
  • 安卓自定义状态栏图标
  • jquery树形菜单
  • jquery给div添加样式
  • python中django
  • 黑龙江地方税务总局官网
  • 广西发票查询平台
  • 税务局冬季作息时间
  • 纳税人欠缴税款怎么办
  • 河南地税申报表怎么填
  • 股东向公司借款需要什么手续
  • 国家税务总局2011年34号公告
  • 迈凯伦gt1
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设