单例模式--“啤酒饮料矿泉水,花生瓜子八宝粥。 来,腿收一下了啊。”
为什么叫它单身汉模式?
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
看到没?自给自足。
俗话说,“小富靠勤,中富靠德,大富靠命”。单身汉也有懒惰的和勤劳的。
1.懒汉模式(延迟加载)
延迟加载就是调用get()方法时实例才被创建(先不急着实例化出对象,等要用的时候才给你创建出来。不着急,故又称为“懒汉模式”),常见的实现方法就是在get方法中进行new实例化。。
通俗理解:火车上到饭点了,懒汉在喇叭吆喝:谁要吃饭,大盘鸡,热干面,拍黄瓜和皮蛋。想要吃的来我这说一声哈,我给你new出来。现吃先做,热乎的。
public class Singleton {// 将自身实例化对象设置为一个属性,并用static修饰private static Singleton instance;// 构造方法私有化private Singleton() {}// 静态方法返回该实例public static Singleton getInstance() {if(instance == null) {instance = new Singleton();}return instance;}
}
“懒汉”的优缺点:
优点:实现起来比较简单,当类SingletonTest被加载的时候,静态变量static的instance未被创建并分配内存空间,当getInstance方法第一次被调用时,初始化instance变量,并分配内存,因此在某些特定条件下会节约了内存。
缺点:在多线程环境中,懒汉根本应付不来,根本不能保证单例的状态。
2.饿汉模式(立即加载 )
立即加载就是使用类的时候已经将对象创建完毕(不管以后会不会使用到该实例化对象,先创建了再说。很着急的样子,故又被称为“饿汉模式”),常见的实现办法就是直接new实例化。
通俗理解:还是火车上,饿汉吆喝道:啤酒饮料矿泉水,花生瓜子八宝粥。来,腿收一下了啊。想吃热干面?我这有,已经做好了。打开立马可以吃!
public class Singleton {// 将自身实例化对象设置为一个属性,并用static、final修饰private static final Singleton instance = new Singleton();// 构造方法私有化private Singleton() {}// 静态方法返回该实例public static Singleton getInstance() {return instance;}
}
“饿汉”的优缺点:
优点:实现起来简单,没有多线程同步问题。
缺点:占地方,推车就那么大一点。当类SingletonTest被加载的时候,会初始化static的instance,静态变量被创建并分配内存空间,从这以后,这个static的instance对象便一直占着这段内存(即便你还没有用到这个实例),当类被卸载时,静态变量被摧毁,并释放所占有的内存,因此在某些特定条件下会耗费内存。
3.线程安全的懒汉模式
public class Singleton {// 将自身实例化对象设置为一个属性,并用static修饰private static Singleton instance;// 构造方法私有化private Singleton() {}// 静态方法返回该实例,加synchronized关键字实现同步public static synchronized Singleton getInstance() {if(instance == null) {instance = new Singleton();}return instance;}
}
优点:在多线程情形下,保证了“懒汉模式”的线程安全。
缺点:众所周知在多线程情形下,synchronized方法通常效率低,显然这不是最佳的实现方案。
4.DCL双检查锁机制(DCL:double checked locking)
public class Singleton {// 将自身实例化对象设置为一个属性,并用static修饰private static Singleton instance;// 构造方法私有化private Singleton() {}// 静态方法返回该实例public static Singleton getInstance() {// 第一次检查instance是否被实例化出来,如果没有进入if块if(instance == null) {synchronized (Singleton.class) {// 某个线程取得了类锁,实例化对象前第二次检查instance是否已经被实例化出来,如果没有,才最终实例出对象if (instance == null) {instance = new Singleton();}}}return instance;}
}
是单例模式的最佳实现方式。内存占用率高,效率高,线程安全,多线程操作原子性。
参考文档:https://www.cnblogs.com/binaway/p/8889184.html
单例模式--“啤酒饮料矿泉水,花生瓜子八宝粥。 来,腿收一下了啊。”相关推荐
- 梅森素数、猜年龄、啤酒饮料、武功秘籍、调和级数、李白打酒、猜字母、扩散、三升序列、寻找2020
梅森素数 题目 如果一个数字的所有真因子之和等于自身,则称它为"完全数"或"完美数" 例如:6 = 1 + 2 + 3 28 = 1 + 2 + 4 + 7 + ...
- 3D啤酒饮料冷冻柜模型
3D啤酒饮料冷冻柜模型素材,红动中国提供3D啤酒饮料冷冻柜模型设计素材下载.格 式:max,大 小:3.01 MB.欢迎优秀设计师到红动中国销售原创设计稿赚钱. 饮料类物品柜3D模型素材,红动中国提供 ...
- 全球与中国啤酒饮料灌装设备市场深度研究分析报告
[报告篇幅]:133 [报告图表数]:174 [报告出版时间]:2021年1月 报告摘要 2019年,全球啤酒饮料灌装设备市场规模达到了xx亿元,预计2026年将达到xx亿元,年复合增长率(CAGR) ...
- C语言-啤酒饮料问题
C语言的啤酒饮料问题 文章目录 C语言的啤酒饮料问题 前言 一.题目要求 二.作答步骤 1.思路 2.代码演示 前言 作为一个物联在读生,C语言是我们必学的一科,今天分享的是"啤酒饮料问题& ...
- 花生瓜子矿泉水,几点认知思考和大家唠唠
站好最后一班岗,今天呱哥也终于放假了. 快过年了,咱也不分享啥产品干货了,今天我在车上就和大家闲聊闲聊. 关于社交 很多产品同学加我之后,不打招呼. 或者也没有自我介绍,有的人只是介绍一个名字就没有了 ...
- 百钱买白鸡与啤酒饮料
第一题 标题:啤酒和饮料 啤酒每罐2.3元,饮料每罐1.9元.小明买了若干啤酒和饮料,一共花了82.3元. 我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒. ...
- C++面试 select poll epoll之间的区别
目录 摘要 场景描述 Select poll epoll 总结 摘要 先明确几个概念: 面试官问:给我讲讲什么事同步阻塞.异步阻塞.同步非阻塞.异步非阻塞. 我:????? 同步和异步的概念 同步是指 ...
- 万万没想到,我居然在机器人大会遇到了这些奇葩物种
郭一璞 发自 亦庄 量子位 报道 | 公众号 QbitAI 世界机器人大会,这两天又开幕了,今年已经是第五届了. 在本届大会的机器人展区,对比每年展出的机器人,你总能嗅到机器人这个领域的一丝味道. ...
- 有位置,来,搬个小板凳,喝酒听故事!
本文大概 1700字 阅读需要 5分钟 欢迎进来,容我给你搬个小板凳,坐下喝酒边听音乐边听故事吧.全程无痛点,世与俗,共敬之.认真扯淡,认真生活! 今天我大学的死党兄弟小白带着媳妇来西安逛,你要知道从 ...
最新文章
- php制表网页打印到a4纸,A4纸网页打印 html网页页面的宽度设置成多少
- 数学--数论--原根(循环群生成元)
- [你必须知道的异步编程]——异步编程模型(APM)
- 刚刚,北京正式允许无人车上路路测!准入门槛500万元
- Unit04 - 继承的意义(下) 、 访问控制 、 static和final
- python生成3d人体模型_无限想象空间,用Python就能玩的3D人体姿态估计
- matlab亚式 期权定价,MATLAB在幂型几何亚式期权定价中的应用
- 文件服务器要备案么,icp备案一定要云服务器吗
- WordPress安装时未选择语言导致变成英文无法修改成中文
- XCode 报错Thread 2:signal SIGABRT
- 关于北京租房,我想吐槽的一些东西
- C++24小时制转换成12小时制
- python-迭代器_高阶函数
- k8s ingress yml 浅薄理解
- ubuntu服务器的安装(转载)
- 滴水逆向——PE导出表
- 五年后计算机专业还会吃香吗,这三个专业或将在5年后最有前途,应届生必看!...
- java分布式架构-iBase4J
- AI-腾讯云人脸核身之独立H5接入
- opencv调pc摄像头拍摄图片
热门文章
- 模架的确定和标准件的选用
- 力天创见FLIR Brickstream智能客流分析系统
- 计算机建模报告,计算机三维建模及析实验报告单.doc
- vue-epg的使用(电视遥控器控制web 页面焦点)
- NE564锁相环使用心得
- SAP错误提示:“未在成本控制范围中给会计年度*定义版本*”
- Ubuntu 安装Flatabulous扁平化风格的桌面主题
- 用SEO五招轻松搞定竞争对手
- JavaScript基础(四)对象、数组、对象与数组的常用API
- 炫界 (587) -(牛一邓丽君音)_邓丽君逝世25周年,追忆她的那些绝美歌声与故事