可以说是单例模式中写法最简单的一个方式,这个就是饿汉式,也就是在类加载的时候,就完成实例化,那他虽然简单,有没有什么值得研究的地方呢,当然是有的,首先我们先完成一个饿汉式的简单实现
package com.learn.design.pattern.creational.singleton;import java.io.Serializable;/*** * @author Leon.Sun**/
public class HungrySingleton implements Serializable,Cloneable{/*** 我们直接声明* 让我们引用类名来做hungrySingleton* 我们首先new一个HungrySingleton* 也就是说在类加载的时候* 就初始化了* 当然这个在类加载的时候就初始化* 我们可以把它做成final的* 这样这个对象就不可改了* 在类加载的时候就初始化加载好了* 也不需要更改了* 这个final看具体的情况* 这个就是一个非常简单的饿汉式* 优点是写法简单* 类加载的时候就完成了初始化* 避免了线程同步的问题* 缺点也是应为在类加载的时候呢就完成初始化* 没有延迟加载的效果* 如果这个类从始至终我的系统没有用过* 那会造成内存的浪费* 我们也可以把这个实例化的过程放到静态代码块里面* * * */private final static HungrySingleton hungrySingleton;/*** 我们试一下static* 我们使用过静态块* 来初始化properties的配置文件* * */static{/*** 然后new一下* 这里报红线了* 因为上面是final的* 也给他初始化了* 所以静态块里边* 并不能初始化* 如果用静态块的话* 我们可以把后面的new删除掉* private final static HungrySingleton hungrySingleton;* 这样就可以了* 那声明为final的变量* 必须在类加载完成时* 已经赋值* 第一种方式呢* 直接new出来* 或者放到静态块里边* 这个都能完成在类加载的时候就完成赋值* 所以在lazy这种模式里边* 它是不能修饰成final的* 因为他不是在类加载的时候就初始化好* 那对于饿汉式呢* 有用final的* 也有不用final的* 都可以* 因为饿汉和懒汉之间* 最大的区别就是延迟加载* 是在类加载的时候初始化* 还是调用之后初始化* 那这个修饰符我们也要注意* 这两个效果都是一样的* 只不过hungrySingleton在内存加载的时候* 把这个创建对象的过程* 放到了静态代码块里边* 那类加载的时候* 也会执行静态代码块中的代码* 进行初始化这个类的实例* 看上去饿汉式是最简单的* 如果我们的资源浪费少的话* 用这种方式也是可以的* 因为这种方式比较简单* 就不领着debug了* 多线程的时候也是没有问题的* 因为类加载的时候就初始化好了* 所以这里面也不用做空判断* 直接返回就可以了* 那这个就称之为饿汉式* 前面我们还学过懒汉式* 那有什么技巧吗* 很简单* 饿汉式因为它很饿* 一上来就想吃东西* 所以就把这个对象一上来就new好了* 而懒汉式呢* 非常懒* 你不用他的时候他都不用创建对象* 可以利用这个记忆技巧记忆一下* 免得弄混* 我们会挖掘其他的安全隐患* * * */hungrySingleton = new HungrySingleton();}/*** 然后private的构造器* */private HungrySingleton(){if(hungrySingleton != null){throw new RuntimeException("单例构造器禁止反射调用");}}public static HungrySingleton getInstance(){/*** 直接return* */return hungrySingleton;}private Object readResolve(){return hungrySingleton;}@Overrideprotected Object clone() throws CloneNotSupportedException {return getInstance();}
}

单例设计模式-饿汉式相关推荐

  1. java饿汉式有啥作用,Java面试 - 什么是单例设计模式,为什么要使用单例设计模式,如何实现单例设计模式(饿汉式和懒汉式)?...

    什么是单例设计模式? 单例设计模式就是一种控制实例化对象个数的设计模式. 为什么要使用单例设计模式? 使用单例设计模式可以节省内存空间,提高性能.因为很多情况下,有些类是不需要重复产生对象的.如果重复 ...

  2. 设计模式之单例设计模式(饿汉式)

    //饿汉式:类一加载就创建 //创建单例对象 package july.star.thread22;/*** Student* 创建单例对象* @author MoXingJian* @email 9 ...

  3. 懒汉式单例和饿汉式单例优缺点

    1.时间和空间 比较上面两种写法:懒汉式是典型的时间换空间,也就是每次获取实例都会进行判断,看是否需要创建实例,浪费判断的时间.当然,如果一直没有人使用的话,那就不会创建实例,则节约内存空间. 饿汉式 ...

  4. 单例模式(懒汉式单例和饿汉式单例)

    /** 饿汉式单例*/ class Singleon{private static final Singleon singleon = new Singleon();private Singleon( ...

  5. 单例模式(懒汉单例和饿汉单例)

    转载于:http://www.manongjc.com/article/53899.html ==单例模式就是指一个类在整个程序中只有一个实例.==确保一些不需要重复创建的类创建多余的实例.特别是某些 ...

  6. 第三次学JAVA再学不好就吃翔(part117)--单例设计模式

    学习笔记,仅供参考,有错必纠 文章目录 多线程 单例设计模式 饿汉式 懒汉式 第三种格式 Timer类 线程的五种状态 多线程 单例设计模式 单例设计模式,即保证类在内存中只有一个对象,如何保证类在内 ...

  7. java之单例设计模式

    单例设计模式分三种:懒汉式单例设计.饿汉式单例设计.登记式单例设计(可忽略) 单例设计模式的特点: 单例设计类中只能有一个实例. 单例类必须创建自己的唯一实例. 单例类必须给所有其他对象提供这个实例 ...

  8. java 单例模式 ---饿汉式懒汉式

    目录 单例设计模式 饿汉式 懒汉式 饿汉式vs懒汉式 结语 单例设计模式 所谓单例设计模式,就是采取一定的方法在整个软件系统中,对某个类只能存在一个对象实例 1.单例类只能有一个实例. 2.单例类必须 ...

  9. 简单理解懒汉式和饿汉式

    单例设计模式 饿汉式 :一个类只能创建一个对象 私有化构造器 在类的内部创建一个类的实例,且为static 私有化对象,通过公共方法调用 此公共方法只能通过类来调用,因为设置的是static,同时类的 ...

最新文章

  1. python gzip压缩后传给前端_Python 3,从/向gzip文件读取/写入压缩的json对象
  2. JAVA IO修改文本内容
  3. 华为手机在开发Android调试时logcat不显示输出信息的解决办法
  4. 6-3 求链表的倒数第m个元素
  5. 深度学习在美团点评推荐平台排序中的应用 widedeep推荐系统模型--学习笔记
  6. python docx库使用样例_Python docx库用法示例分析
  7. 如何获取ubuntu源码包里面的源码进行编译
  8. 省钱小贴士(ECS):教你如何每年省出8w+ 块
  9. 卢伟冰直播拆机 或是性价比最高的骁龙855手机
  10. 1.MATLAB简介
  11. 深入理解jvm 读后感
  12. spssχ2检验_spss交叉表分析方法与步骤 + SPSS卡方检验结果的阅读
  13. matlab基波有效值,基波有效值
  14. 认知电子战 (1.3):认知电子战概述
  15. 形式化验证工具——prism(1-安装)
  16. Java ServiceLoader使用和解析
  17. python读word表格_python 读word 的表格
  18. 第7-9节项目2-歌手大奖赛计分系列(1)
  19. aardio部署_GitHub - wiseshrek/aardio-erp: aardio10开发企业管理系统:aardio-erp框架源码
  20. 数据结构(C语言版 严蔚敏著)——树

热门文章

  1. new,is和as运算符解析及运行时类型,对象,线程堆栈,托管堆之间的联系
  2. javascript正则表达式(一)
  3. 三层设计模式初步分离
  4. 【Hadoop学起来】分布式Hadoop的搭建(Ubuntu 17.04)
  5. 基于以太坊网络的智能合约开发、部署和测试(入门)
  6. 数组排序(选择排序和冒泡排序)
  7. iOS工程引入ios-charts-master
  8. shell脚本实现动态时钟
  9. 【转】文件读写NDK(或Linux)
  10. shutdown,halt,reboot,init