什么是Singleton,单例设计模式
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,单例设计模式相关推荐
- 【C++设计模式】Singleton 单例设计模式与线程安全
文章目录 何为设计模式(Design Pattern) 单例模式(Singleton) 什么是单例模式? 饿汉单例模式 懒汉单例模式 懒汉单例模式的线程安全版本 经典加锁版本 优化版本:双重检查锁 使 ...
- 单例设计模式singleton
简单引入 单例设计模式作为最简单,最常用的设计模式.一般是这两中写法,这两种写法教科书所谓的标准写法,但是实际上存在不少问题.后面介绍标准写法,以规避这些问题. 1.懒汉式: /*** 问题在于,当多 ...
- 单例设计模式(Singleton)附带案例代码仓库
目录 1 .单例模式的结构 2 .单例模式的实现 2.1.饿汉式(静态变量方式) 2.2.饿汉式(静态代码块方式) 2.3.懒汉式(线程不安全) 2.4.懒汉式(线程安全) 2.5.懒汉式(双重检查锁 ...
- Java设计模式—单例设计模式(Singleton Pattern)完全解析
转载请注明出处:http://blog.csdn.net/dmk877/article/details/50311791 相信大家都知道设计模式,听的最多的也应该是单例设计模式,这种模式也是在开发中用 ...
- javascript设计模式-singleton(单例)模式
singleton(单例)模式被熟知的原因是因为它限制了类的实例化次数只能一次,单例模式,在该实例不存在的勤快下,可以通过一个方法创建一个类来实现创建类的新实例:如果实例已经存在,则会简单返回该对象的 ...
- 单例设计模式详解。。。。。。。。。。。
public class Demo01 { public static void main(String[] args) { // TODO Auto-generated method stub /* ...
- java单例设计模式
单例模式的概念 单例类只有一个实例,并且只由自己创建,实例化后向整个系统提供自己的实例. 单例设计模式主要分为2种:懒汉式和饿汉式.2者的区别在于初始化的时间不同. 像线程池,缓存,日志等都被设计成单 ...
- 单例设计模式八种方式——5) 懒汉式(线程安全,同步代码块) 6) 双重检查 7) 静态内部类 8) 枚举
懒汉式(线程安全,同步代码块)应用实例 优缺点说明: 1) 这种方式,本意是想对第四种实现方式的改进,因为前面同步方法效率太低, 改为同步产生实例化的的代码块 2) 但是这种同步并不能起到线程同步的作 ...
- 单例设计模式介绍||单例设计模式八种方式——1) 饿汉式(静态常量) 2) 饿汉式(静态代码块) 3) 懒汉式(线程不安全) 4) 懒汉式(线程安全,同步方法)
单例模式 单例设计模式介绍 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法). 比如Hibernate的 ...
最新文章
- 脚手架koa2+mockjs
- 开启php支持xml,PHP对XML的支持
- 卡方检验python程序_Python从零开始第二章(1)卡方检验(python)
- 使用T-SQL语句操作数据表-删除数据
- 演示JSP Scriptlets、声明语句、jsp表达式的使用
- bi导入数据失败 power_主机数据库平台迁移 6 个典型问题
- 拓扑排序所有可能java_拓扑排序获取所有可能序列JAVA实现
- 博文视点大讲堂第45期——我们应该向魔兽世界学习什么 圆满结束
- Java逻辑思维训练题
- matlab cy68013,cy7c68013USBload
- office2007安装失败2902_Office2007安装出错怎么办?安装出错原因及解决方法分享
- 计算机重启事件查看,事件查看器检查上一次电脑关机时间
- 阿根廷探戈----中英文对照
- 20172328 2018-2019《Java软件结构与数据结构》第六周学习总结
- Kinect Fusion三维重建
- day03_《谷粒商城》的完整流程(详细版二)
- ​Vue 3 这个坑我踩了,你们一定要小心
- Odoo14问题总结——模块视图不显示
- 学生会管理系统(SSM)vue+ssm+shiro
- JAVA实现雪花飘落动画效果