2019独角兽企业重金招聘Python工程师标准>>>

简单示例:以下是基本的模式,判断uniqueInstance 是否为空,为空则new一个,非空则返回uniqueInstance 实例。但是在使用多线程时无法保证对象的唯一性,要是在判断完uniqueInstance 为空之后,还没new对象,下一个线程进入后,就会生成多个实例,所以有以下优化。

public class beanFactory {public static beanFactory uniqueInstance = null;private beanFactory() {}public static beanFactory getInstance() {if (uniqueInstance == null) {uniqueInstance = new beanFactory ();}return uniqueInstance;}
}

优化一:加同步锁。synchronized,能保证只有一个对象,如果经常调用的话,加同步锁对资源消耗很大。

适用于比较少调用的情况。

public class beanFactory {public static beanFactory uniqueInstance = null;private beanFactory() {}public static synchronized beanFactory getInstance() {if (uniqueInstance == null) {uniqueInstance = new beanFactory ();}return uniqueInstance;}
}

优化二:急切创建实例,减少了同步锁的资源消耗,但是如果没调用到,它还是new出了这个实例,占用了内存空间,适用于调用率较高的情况。

public class beanFactory {public static beanFactory uniqueInstance = new beanFactory();private beanFactory() {}public static beanFactory getInstance() {if (uniqueInstance == null) {uniqueInstance = new beanFactory ();}return uniqueInstance;}
}

优化三:双重检查加锁法。相对于第一种优化,这种方法在刚好有两个线程进去uniqueInstance 非空判断时加了才用同步锁,这样减少了资源的损耗,而且还能保证实例的唯一性。

public class beanFactory {public volatile static beanFactory uniqueInstance = null;private beanFactory() {}public static beanFactory getInstance() {if (uniqueInstance == null) {synchronized (beanFactory .class) {if (uniqueInstance == null) {uniqueInstance = new beanFactory ();}}}return uniqueInstance;}
}

转载于:https://my.oschina.net/xiaozhiwen/blog/1523132

单例模式简单示例与优化相关推荐

  1. python 提高文件查询效率_Python 大量小文件存储提高效率的简单示例

    这篇文章主要为大家详细介绍了Python 大量小文件存储提高效率的简单示例,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧 ...

  2. 炼数成金Tensorflow学习笔记之2.4_Tensorflow简单示例

    炼数成金Tensorflow学习笔记之2.4_Tensorflow简单示例 代码及分析 代码及分析 # -*- coding: utf-8 -*- """ Created ...

  3. Hibernate(1)Hibernate简介和简单示例,了解Hibernate事务回滚用法

    1 Hibernate简介 Hibernate是一个orm(object relation mapping 对象关系映射)框架,处于项目的持久层,也叫持久层框架(持久层框架还有ojb等). Hiber ...

  4. 并行编程OpenMP基础及简单示例

    OpenMP基本概念 OpenMP是一种用于共享内存并行系统的多线程程序设计方案,支持的编程语言包括C.C++和Fortran.OpenMP提供了对并行算法的高层抽象描述,特别适合在多核CPU机器上的 ...

  5. python文本处理实例_Python 文件处理的简单示例

    这篇文章主要为大家详细介绍了Python 文件处理的简单示例,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! 相关的AP ...

  6. python获取mac、计算机id_python 获取本机IP、mac地址、计算机名的简单示例

    这篇文章主要为大家详细介绍了python 获取本机IP.mac地址.计算机名的简单示例,具有一定的参考价值,可以用来参考一下. 对python获取本机IP.mac地址.计算机名感兴趣的小伙伴,下面一起 ...

  7. python简单单元测试示范卷_Python 单元测试的简单示例

    这篇文章主要为大家详细介绍了Python 单元测试的简单示例,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! 以前我是不 ...

  8. python二分法求解_Python使用二分法求平方根的简单示例

    这篇文章主要为大家详细介绍了Python使用二分法求平方根的简单示例,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! 使 ...

  9. Unity 简单示例代码和向导/Unity Aplication Block

    Unity 简单示例代码和向导 关于Unity 的说明和下载地址,请访问[微软控制反转和依赖注入容器Unity 1.0发布] http://forum.entlib.com/Default.aspx? ...

  10. php定时刷新token,PHP 定时任务获取微信access_token的简单示例

    搜索热词 感兴趣PHP 定时任务获取微信access_token的简单示例的小伙伴,下面一起跟随编程之家 jb51.cc的小编来看看吧. 最近开发微信公众平台,公众号调用各接口时都需使用access_ ...

最新文章

  1. 最新的PHP trait使用方法详解
  2. 如何通过HTML标记或JS代码实现跳转返回页面顶部
  3. python if条件判断_python if not in 多条件判断代码
  4. python模型训练效果没有优化_LSTM模型训练效果好,但测试结果较差,不能看出拟合过度...
  5. Lucene.net 下载地址
  6. java 根据类路径获取类_Java类加载器
  7. dm_php库,dmandwp系统 PHP建站系统+wordpress建站和DM系统区块+安装教程
  8. Ubuntu 13.04设置root用户登录图形界面
  9. GitHub仓库项目添加Python语言类别
  10. 无源波分和彩光模块_【光电通信】无源波分在 5G 场景中 的应用分析
  11. ipad 开发常用问题
  12. java十六进制与字符串_JAVA十六进制与字符串的转换方法
  13. LLDP发现相邻设备失败分析
  14. 联发科MT2503芯片资料MT2503原理图
  15. 微信java版s40_塞班微信S40版下载
  16. 乐鑫esp8266学习rtos3.0笔记第10篇:内置仅1M的Esp8285,如何攻破最棘手的OTA问题,大大节省资源成本开发产品;
  17. Excel 技巧大全之 01 如何将公式应用于 Excel 中的整列(5 种简单方法)
  18. 听刘万祥老师讲“风险矩阵分析图”
  19. Lack of free swap space on
  20. 认识Power BI

热门文章

  1. iOS shell脚本打包
  2. request.getRequestDispatcher(url).forward(request, response)
  3. 几个IE与Firefox的兼容性问题 (一、网络转载)
  4. .NET :在Visual Studio的不同Tab之间切换
  5. Kazrog AmpCraft 1992 for Mac - 放大器建模插件
  6. Cook‘n Recipe Organizer X3 Mac(食谱管理器)激活版
  7. 解决Mac电脑在启动时出现空白屏幕情况的解决方法
  8. 一个 JS 框架需要做什么
  9. 视频会议受追捧,省钱又节能
  10. SecureCRT在linux与windows本地互传文件之SFTP