什么是单例模式
单例(单个的实例)
1.所谓单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法
2.单例设计模式有两种方式:饿汉式 与 懒汉式

饿汉式:
饿汉式听名字就知道它就像一个饿死鬼一样,有饭就赶紧吃,有饭就抢着吃。
所以,在程序启动或单例模式类被加载的时候,单例模式实例就已经被创建。

创建步骤:
1)构造器私有化 —>防止直接new对象
2)类的内部创建对象
3)向外暴露一个静态的公共方法 (getInstance)

//饿汉式
public class SingletonTest {//私有化类的构造器,让外部无法调用private SingletonTest(){}//类的内部创建类的对象,并且此对象必须声明静态private static SingletonTest instance= new SingletonTest();//提供公共的静态的方法,返回类的对象public static SingletonTest getInstance(){return instance;}
}

懒汉式:
懒汉式顾名思义就像一个懒惰的大汉,能不干活就不干活。所以它直到第一次去使用的时候,才会创建实例对象。

实现步骤:
1.仍然构造器私有化
2.定义一个 static 静态属性对象
3.提供一个 public 的 static 方法,可以返回一个对象
4.懒汉式,只有当用户使用 getInstance 时,才返回对象, 后面再次调用时,会返回上次创建的对象

线程不安全模式

class Singleton{//私有化类的构造器private Singleton(){}//声明当前类的对象,并且是static,但是没有赋值private static Singleton instance = null;//声明为public、static的方法用来返回类的实例//如果发现当且instance为null,给instance创建一个实例。public static Singleton getInstance(){if(instance == null){instance = new Singleton();}return instance;}
}

线程安全模式:

class Singleton{//私有化类的构造器private Singleton(){}//声明当前类的对象,并且是static,但是没有赋值//此处添加volatile是为了防止指令重排序private static volatile Singleton instance = null;//声明为public、static的方法用来返回类的实例//如果发现当且instance为null,给instance创建一个实例。public static Singleton getInstance(){if(instance == null){synchronized(Singleton.class){if(instance == null){//这并不是一个原子操作//1.给instance分配内存空间//2.调用Singleton构造函数初始化//3.将instance对象指向分配的内存空间,此时instance不为null//使用volatile修饰instance就是防止这1-2-3步被指令重排,保证其顺序执行instance = new Singleton();}}}return instance;}
}

简简单单的总结一下吧
1.二者最主要的区别在于创建对象时机不同:
1)饿汉式是在类加载就创建了对象
2)懒汉式是在使用时在会创建对象
2.饿汉式不存在线程安全问题,懒汉式存在线程安全问题
3.饿汉式存在浪费资源的可能,因为它是在类加载的时候就创建了对象吗, 如果我们不使用它,那不就浪费了。
懒汉式是在使用的时候才会创建,所以就不存在这个问题啦。

补充:在我们javaSE标准类中,java.lang.Runtime
就是经典的单例模式。

单例设计模式(饿汉式VS懒汉式)相关推荐

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

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

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

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

  3. 单例设计模式-饿汉式

    可以说是单例模式中写法最简单的一个方式,这个就是饿汉式,也就是在类加载的时候,就完成实例化,那他虽然简单,有没有什么值得研究的地方呢,当然是有的,首先我们先完成一个饿汉式的简单实现 package c ...

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

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

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

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

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

    以前学习单例的时候,只理解了简单部分.这次看DRP,对单例的饿汉式和懒汉式有了一些认识和对比. 在实际的开发中,有些地方需要一个类只有一个实例.比如:网站在线人数的计数器,再比如IDE中的工具箱之类的 ...

  7. 23种设计模式:单例设计模式(饿汉式 VS 懒汉式)

    23种设计模式:单例设计模式(饿汉式 VS 懒汉式) 每博一文案 世事浮沉,有太多的责任需要我们担当,生活中总有些挫折和磨难,让我们觉得快要杠不住了. 但当我们咬牙坚持过那段难熬的时光后,发现并没有想 ...

  8. C++常用设计模式:单例设计模式(饿汉式、懒汉式)

    一.单例模式的设计套路: 思考:如何绕过常规的构造函数,提供一种机制来保证一个类只有一个实例. 1. 铺垫:静态成员函数特性的总结 使用static关键字修饰类成员函数时,就是把这个成员函数升级成了全 ...

  9. java学习之单例模式(饿汉式与懒汉式)

    ---恢复内容开始--- 设计模式:解决某一类问题最行之有效的方法 java中有23种设计模式 今天学习其中一种:单例设计模式:解决一个类在内存只存在一个对象 想要保证对象唯一. 1.为了避免其他程序 ...

最新文章

  1. rabbitmq怎样确认是否已经消费了消息_【朝夕专刊】RabbitMQ生产者/消费者消息确认...
  2. 不错的威盾PHP加密专家解密算法
  3. 记录两段经典标定代码
  4. laravel 5.5 的相关字符串辅助函数
  5. 【MaxCompute】学习笔记操作表sql
  6. protect a health
  7. HBase原理-要弄懂的sequenceId
  8. ExtJs CheckboxSelectionModel 全选操作后 清空表格头的checkBox
  9. 服务器升级文件 不推送就无法打开吗,Win7升Windows10有获取通知,但是就不推送的解决方法...
  10. Swift UISearchController
  11. linux nginx 安装
  12. 【原创】Maven cobertura整合多个子项目下的单测覆盖率报告
  13. C4d模型--电商广告海报三维模型
  14. 在ASP.NET Core 2.0中创建Web API
  15. 最惊艳你的短句是什么?
  16. android屏幕适配无效_AndroidAutoLayout
  17. ngix入门 Linux系统Ubuntu ngix安装
  18. 如何下载历史版本的App Store中的APP
  19. Postman——pre-request产生随机字符串和随机数字传给request body
  20. 互联网糖水营销策略-科学城篇

热门文章

  1. 家装软件相关算法和技术归纳
  2. DVWA靶机-文件上传漏洞(File Upload)
  3. C语言写的贪吃蛇(国庆任务项目)
  4. 笔记:基于freeradius 3.0的wifi认证
  5. 微软 android启动器,微软启动器Mirosoft Launcher
  6. 【前端面试】Part 1:2020届初级前端校招笔试题及面经总结 —— 基础知识题
  7. 基于libyuv库的NV12格式图片的缩放
  8. [28期] 精力有限,精神信念的力量是无限的.....
  9. mybatis Sql查询 返回对象或者list数据中包含一个对象的list集合
  10. 【转贴】【管理】生存奥秘诙谐解说