Singleton  [ˈsɪŋɡltən] 单例模式 在java中是指单例设计模式。

单例设计模式:

单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。

例如:例如jvm运行环境的Runtime类

具体实现

需要:

(1)将构造方法私有化,使其不能在类的外部通过new关键字实例化该类对象。

(2)在该类内部产生一个唯一的实例化对象,并且将其封装为private static类型。

(3)定义一个静态方法返回这个唯一对象。

实现一:立即加载 / “饿汉模式”

立即加载就是使用类的时候已经将对象创建完毕(不管以后会不会使用到该实例化对象,先创建了再说。很着急的样子,故又被称为“饿汉模式”),常见的实现办法就是直接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对象便一直占着这段内存(即便你还没有用到这个实例),当类被卸载时,静态变量被摧毁,并释放所占有的内存,因此在某些特定条件下会耗费内存。

实现二:延迟加载 / “懒汉模式”

延迟加载就是调用get()方法时实例才被创建(先不急着实例化出对象,等要用的时候才给你创建出来。不着急,故又称为“懒汉模式”),常见的实现方法就是在get方法中进行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变量,并分配内存,因此在某些特定条件下会节约了内存。

缺点:在多线程环境中,这种实现方法是完全错误的,根本不能保证单例的状态。

实现三:线程安全的“懒汉模式”

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方法通常效率低,显然这不是最佳的实现方案。

synchronized  [ˈsɪŋkrənaɪzd]   同步

什么是Singleton,单例设计模式相关推荐

  1. 【C++设计模式】Singleton 单例设计模式与线程安全

    文章目录 何为设计模式(Design Pattern) 单例模式(Singleton) 什么是单例模式? 饿汉单例模式 懒汉单例模式 懒汉单例模式的线程安全版本 经典加锁版本 优化版本:双重检查锁 使 ...

  2. 单例设计模式singleton

    简单引入 单例设计模式作为最简单,最常用的设计模式.一般是这两中写法,这两种写法教科书所谓的标准写法,但是实际上存在不少问题.后面介绍标准写法,以规避这些问题. 1.懒汉式: /*** 问题在于,当多 ...

  3. 单例设计模式(Singleton)附带案例代码仓库

    目录 1 .单例模式的结构 2 .单例模式的实现 2.1.饿汉式(静态变量方式) 2.2.饿汉式(静态代码块方式) 2.3.懒汉式(线程不安全) 2.4.懒汉式(线程安全) 2.5.懒汉式(双重检查锁 ...

  4. Java设计模式—单例设计模式(Singleton Pattern)完全解析

    转载请注明出处:http://blog.csdn.net/dmk877/article/details/50311791 相信大家都知道设计模式,听的最多的也应该是单例设计模式,这种模式也是在开发中用 ...

  5. javascript设计模式-singleton(单例)模式

    singleton(单例)模式被熟知的原因是因为它限制了类的实例化次数只能一次,单例模式,在该实例不存在的勤快下,可以通过一个方法创建一个类来实现创建类的新实例:如果实例已经存在,则会简单返回该对象的 ...

  6. 单例设计模式详解。。。。。。。。。。。

    public class Demo01 { public static void main(String[] args) { // TODO Auto-generated method stub /* ...

  7. java单例设计模式

    单例模式的概念 单例类只有一个实例,并且只由自己创建,实例化后向整个系统提供自己的实例. 单例设计模式主要分为2种:懒汉式和饿汉式.2者的区别在于初始化的时间不同. 像线程池,缓存,日志等都被设计成单 ...

  8. 单例设计模式八种方式——5) 懒汉式(线程安全,同步代码块) 6) 双重检查 7) 静态内部类 8) 枚举

    懒汉式(线程安全,同步代码块)应用实例 优缺点说明: 1) 这种方式,本意是想对第四种实现方式的改进,因为前面同步方法效率太低, 改为同步产生实例化的的代码块 2) 但是这种同步并不能起到线程同步的作 ...

  9. 单例设计模式介绍||单例设计模式八种方式——1) 饿汉式(静态常量) 2) 饿汉式(静态代码块) 3) 懒汉式(线程不安全) 4) 懒汉式(线程安全,同步方法)

    单例模式 单例设计模式介绍 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法). 比如Hibernate的 ...

最新文章

  1. 脚手架koa2+mockjs
  2. 开启php支持xml,PHP对XML的支持
  3. 卡方检验python程序_Python从零开始第二章(1)卡方检验(python)
  4. 使用T-SQL语句操作数据表-删除数据
  5. 演示JSP Scriptlets、声明语句、jsp表达式的使用
  6. bi导入数据失败 power_主机数据库平台迁移 6 个典型问题
  7. 拓扑排序所有可能java_拓扑排序获取所有可能序列JAVA实现
  8. 博文视点大讲堂第45期——我们应该向魔兽世界学习什么 圆满结束
  9. Java逻辑思维训练题
  10. matlab cy68013,cy7c68013USBload
  11. office2007安装失败2902_Office2007安装出错怎么办?安装出错原因及解决方法分享
  12. 计算机重启事件查看,事件查看器检查上一次电脑关机时间
  13. 阿根廷探戈----中英文对照
  14. 20172328 2018-2019《Java软件结构与数据结构》第六周学习总结
  15. Kinect Fusion三维重建
  16. day03_《谷粒商城》的完整流程(详细版二)
  17. ​Vue 3 这个坑我踩了,你们一定要小心
  18. Odoo14问题总结——模块视图不显示
  19. 学生会管理系统(SSM)vue+ssm+shiro
  20. JAVA实现雪花飘落动画效果

热门文章

  1. createfile调用失败_CreateFile 函数说明
  2. 满是忧愁却又心满意足
  3. 十大经典排序算法时间复杂度和空间复杂度总结
  4. 商家如何选择和投放钻展资源位?
  5. java学生成绩管理系统设计的个人体会
  6. Wi-Fi如何获取手机号码
  7. Windows下安装nacos2与springboot服务注册验证
  8. 深入了解Linux网络设置
  9. C语言基本数据类型简介
  10. 包邮送新款笔记本电脑,也可折现