单例模式简单示例与优化
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
单例模式简单示例与优化相关推荐
- python 提高文件查询效率_Python 大量小文件存储提高效率的简单示例
这篇文章主要为大家详细介绍了Python 大量小文件存储提高效率的简单示例,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧 ...
- 炼数成金Tensorflow学习笔记之2.4_Tensorflow简单示例
炼数成金Tensorflow学习笔记之2.4_Tensorflow简单示例 代码及分析 代码及分析 # -*- coding: utf-8 -*- """ Created ...
- Hibernate(1)Hibernate简介和简单示例,了解Hibernate事务回滚用法
1 Hibernate简介 Hibernate是一个orm(object relation mapping 对象关系映射)框架,处于项目的持久层,也叫持久层框架(持久层框架还有ojb等). Hiber ...
- 并行编程OpenMP基础及简单示例
OpenMP基本概念 OpenMP是一种用于共享内存并行系统的多线程程序设计方案,支持的编程语言包括C.C++和Fortran.OpenMP提供了对并行算法的高层抽象描述,特别适合在多核CPU机器上的 ...
- python文本处理实例_Python 文件处理的简单示例
这篇文章主要为大家详细介绍了Python 文件处理的简单示例,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! 相关的AP ...
- python获取mac、计算机id_python 获取本机IP、mac地址、计算机名的简单示例
这篇文章主要为大家详细介绍了python 获取本机IP.mac地址.计算机名的简单示例,具有一定的参考价值,可以用来参考一下. 对python获取本机IP.mac地址.计算机名感兴趣的小伙伴,下面一起 ...
- python简单单元测试示范卷_Python 单元测试的简单示例
这篇文章主要为大家详细介绍了Python 单元测试的简单示例,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! 以前我是不 ...
- python二分法求解_Python使用二分法求平方根的简单示例
这篇文章主要为大家详细介绍了Python使用二分法求平方根的简单示例,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! 使 ...
- Unity 简单示例代码和向导/Unity Aplication Block
Unity 简单示例代码和向导 关于Unity 的说明和下载地址,请访问[微软控制反转和依赖注入容器Unity 1.0发布] http://forum.entlib.com/Default.aspx? ...
- php定时刷新token,PHP 定时任务获取微信access_token的简单示例
搜索热词 感兴趣PHP 定时任务获取微信access_token的简单示例的小伙伴,下面一起跟随编程之家 jb51.cc的小编来看看吧. 最近开发微信公众平台,公众号调用各接口时都需使用access_ ...
最新文章
- 最新的PHP trait使用方法详解
- 如何通过HTML标记或JS代码实现跳转返回页面顶部
- python if条件判断_python if not in 多条件判断代码
- python模型训练效果没有优化_LSTM模型训练效果好,但测试结果较差,不能看出拟合过度...
- Lucene.net 下载地址
- java 根据类路径获取类_Java类加载器
- dm_php库,dmandwp系统 PHP建站系统+wordpress建站和DM系统区块+安装教程
- Ubuntu 13.04设置root用户登录图形界面
- GitHub仓库项目添加Python语言类别
- 无源波分和彩光模块_【光电通信】无源波分在 5G 场景中 的应用分析
- ipad 开发常用问题
- java十六进制与字符串_JAVA十六进制与字符串的转换方法
- LLDP发现相邻设备失败分析
- 联发科MT2503芯片资料MT2503原理图
- 微信java版s40_塞班微信S40版下载
- 乐鑫esp8266学习rtos3.0笔记第10篇:内置仅1M的Esp8285,如何攻破最棘手的OTA问题,大大节省资源成本开发产品;
- Excel 技巧大全之 01 如何将公式应用于 Excel 中的整列(5 种简单方法)
- 听刘万祥老师讲“风险矩阵分析图”
- Lack of free swap space on
- 认识Power BI
热门文章
- iOS shell脚本打包
- request.getRequestDispatcher(url).forward(request, response)
- 几个IE与Firefox的兼容性问题 (一、网络转载)
- .NET :在Visual Studio的不同Tab之间切换
- Kazrog AmpCraft 1992 for Mac - 放大器建模插件
- Cook‘n Recipe Organizer X3 Mac(食谱管理器)激活版
- 解决Mac电脑在启动时出现空白屏幕情况的解决方法
- 一个 JS 框架需要做什么
- 视频会议受追捧,省钱又节能
- SecureCRT在linux与windows本地互传文件之SFTP