为什么叫它单身汉模式?

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

单例模式--“啤酒饮料矿泉水,花生瓜子八宝粥。 来,腿收一下了啊。”相关推荐

  1. 梅森素数、猜年龄、啤酒饮料、武功秘籍、调和级数、李白打酒、猜字母、扩散、三升序列、寻找2020

    梅森素数 题目 如果一个数字的所有真因子之和等于自身,则称它为"完全数"或"完美数" 例如:6 = 1 + 2 + 3 28 = 1 + 2 + 4 + 7 + ...

  2. 3D啤酒饮料冷冻柜模型

    3D啤酒饮料冷冻柜模型素材,红动中国提供3D啤酒饮料冷冻柜模型设计素材下载.格 式:max,大 小:3.01 MB.欢迎优秀设计师到红动中国销售原创设计稿赚钱. 饮料类物品柜3D模型素材,红动中国提供 ...

  3. 全球与中国啤酒饮料灌装设备市场深度研究分析报告

    [报告篇幅]:133 [报告图表数]:174 [报告出版时间]:2021年1月 报告摘要 2019年,全球啤酒饮料灌装设备市场规模达到了xx亿元,预计2026年将达到xx亿元,年复合增长率(CAGR) ...

  4. C语言-啤酒饮料问题

    C语言的啤酒饮料问题 文章目录 C语言的啤酒饮料问题 前言 一.题目要求 二.作答步骤 1.思路 2.代码演示 前言 作为一个物联在读生,C语言是我们必学的一科,今天分享的是"啤酒饮料问题& ...

  5. 花生瓜子矿泉水,几点认知思考和大家唠唠

    站好最后一班岗,今天呱哥也终于放假了. 快过年了,咱也不分享啥产品干货了,今天我在车上就和大家闲聊闲聊. 关于社交 很多产品同学加我之后,不打招呼. 或者也没有自我介绍,有的人只是介绍一个名字就没有了 ...

  6. 百钱买白鸡与啤酒饮料

    第一题  标题:啤酒和饮料       啤酒每罐2.3元,饮料每罐1.9元.小明买了若干啤酒和饮料,一共花了82.3元.       我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒.   ...

  7. C++面试 select poll epoll之间的区别

    目录 摘要 场景描述 Select poll epoll 总结 摘要 先明确几个概念: 面试官问:给我讲讲什么事同步阻塞.异步阻塞.同步非阻塞.异步非阻塞. 我:????? 同步和异步的概念 同步是指 ...

  8. 万万没想到,我居然在机器人大会遇到了这些奇葩物种

    郭一璞 发自 亦庄  量子位 报道 | 公众号 QbitAI 世界机器人大会,这两天又开幕了,今年已经是第五届了. 在本届大会的机器人展区,对比每年展出的机器人,你总能嗅到机器人这个领域的一丝味道. ...

  9. 有位置,来,搬个小板凳,喝酒听故事!

    本文大概 1700字 阅读需要 5分钟 欢迎进来,容我给你搬个小板凳,坐下喝酒边听音乐边听故事吧.全程无痛点,世与俗,共敬之.认真扯淡,认真生活! 今天我大学的死党兄弟小白带着媳妇来西安逛,你要知道从 ...

最新文章

  1. php制表网页打印到a4纸,A4纸网页打印 html网页页面的宽度设置成多少
  2. 数学--数论--原根(循环群生成元)
  3. [你必须知道的异步编程]——异步编程模型(APM)
  4. 刚刚,北京正式允许无人车上路路测!准入门槛500万元
  5. Unit04 - 继承的意义(下) 、 访问控制 、 static和final
  6. python生成3d人体模型_无限想象空间,用Python就能玩的3D人体姿态估计
  7. matlab亚式 期权定价,MATLAB在幂型几何亚式期权定价中的应用
  8. 文件服务器要备案么,icp备案一定要云服务器吗
  9. WordPress安装时未选择语言导致变成英文无法修改成中文
  10. XCode 报错Thread 2:signal SIGABRT
  11. 关于北京租房,我想吐槽的一些东西
  12. C++24小时制转换成12小时制
  13. python-迭代器_高阶函数
  14. k8s ingress yml 浅薄理解
  15. ubuntu服务器的安装(转载)
  16. 滴水逆向——PE导出表
  17. 五年后计算机专业还会吃香吗,这三个专业或将在5年后最有前途,应届生必看!...
  18. java分布式架构-iBase4J
  19. AI-腾讯云人脸核身之独立H5接入
  20. opencv调pc摄像头拍摄图片

热门文章

  1. 模架的确定和标准件的选用
  2. 力天创见FLIR Brickstream智能客流分析系统
  3. 计算机建模报告,计算机三维建模及析实验报告单.doc
  4. vue-epg的使用(电视遥控器控制web 页面焦点)
  5. NE564锁相环使用心得
  6. SAP错误提示:“未在成本控制范围中给会计年度*定义版本*”
  7. Ubuntu 安装Flatabulous扁平化风格的桌面主题
  8. 用SEO五招轻松搞定竞争对手
  9. JavaScript基础(四)对象、数组、对象与数组的常用API
  10. 炫界 (587) -(牛一邓丽君音)_邓丽君逝世25周年,追忆她的那些绝美歌声与故事